簡介#
ABP 的權限管理非常全面,包括介面訪問、頁面訪問、選單、局部渲染、JavaScript 等,下面介紹了 ABP 權限的所有使用場景。
權限定義變更#
- 修改
*.Application.Contracts\\Permissions\\*PermissionDefinitionProvider
內容以變更權限定義 - 執行
*.DbMigrator
專案會自動向 "admin" 角色授予新權限 (granted to the admin role)
介面驗證#
如果僅允許登錄後使用者訪問,在 Service 上添加 [Authorize]
標記即可。
如果是對 Abp 的 CRUD 函數驗證,直接在 Service 實現類的 constructor 中添加如下內容:
// 注意:賦值語句後的 Permission Policy 根據實際情況修改
GetPolicyName = *Permissions.RemoteServersConfiguration.Default;
GetListPolicyName = *Permissions.RemoteServersConfiguration.Default;
CreatePolicyName = *Permissions.RemoteServersConfiguration.Create;
UpdatePolicyName = *Permissions.RemoteServersConfiguration.Edit;
DeletePolicyName = *Permissions.RemoteServersConfiguration.Delete;
如果是對自定義的函數驗證,有兩種方式驗證,其中的 Permission Policy 根據實際情況修改:
- 是在函數內調用
await CheckPolicyAsync(GetListPolicyName);
- 在方法簽名上添加
[Authorize(GetListPolicyName)]
標記
網站左側選單 (Sidebar) 驗證#
在網站左側選單中顯示或隱藏選單,即對選單驗證:
- 找到
*.Web\Menus\*MenuContributor.ConfigureMainMenuAsync()
- 定義選單 metadata
- 在選單上調用
.RequirePermissions(*Permissions.RemoteServersBoard.Default)
,該函數內的 Permission Policy 根據實際情況調整
Razor Pages 驗證#
僅對選單驗證並不能真正保護頁面,如果直接在瀏覽器中輸入路徑仍然可以訪問頁面,所以還需要對頁面進行驗證:
-
找到
*.Web\*WebModule.ConfigureServices()
,並定位到Configure<RazorPagesOptions>
代碼處 -
參考現有配置,添加以下代碼對頁面路徑進行驗證,頁面路徑和 Permission Policy 根據實際情況修改:
options.Conventions.AuthorizePage("/RemoteServers/Board/Remote", *Permissions.RemoteServersBoard.Remote);
Razor Pages Server Side Render 驗證#
對頁面進行驗證後,頁面內伺服器渲染的內容也需要驗證,即只允許使用頁面內有權使用的功能:
-
在 Razor Pages 頁面內添加
@inject IAuthorizationService AuthorizationService
以注入驗證服務 -
在需要驗證的伺服器渲染內容外添加以下驗證代碼,其中的 Permission Policy 根據實際情況修改:
@if (await AuthorizationService.IsGrantedAsync(*Permissions.RemoteServersConfiguration.Create)) { <p>hi</> }
JavaScript 驗證#
即使對 Server Side Render 內容驗證後,仍不能真正的保護應用,因為有些內容是通過 JavaScript 動態加載的,這部分需要用 JavaScript 來驗證:
-
打開需要驗證的 JavaScript 代碼,添加以下驗證代碼,其中的 Permission Policy 根據實際情況修改:
abp.auth.isGranted('*.RemoteServers.Configuration.Edit')