myesn

myEsn2E9

hi
github

ABP權限

簡介#

ABP 的權限管理非常全面,包括介面訪問、頁面訪問、選單、局部渲染、JavaScript 等,下面介紹了 ABP 權限的所有使用場景。

權限定義變更#

  1. 修改 *.Application.Contracts\\Permissions\\*PermissionDefinitionProvider 內容以變更權限定義
  2. 執行 *.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) 驗證#

在網站左側選單中顯示或隱藏選單,即對選單驗證:

  1. 找到 *.Web\Menus\*MenuContributor.ConfigureMainMenuAsync()
  2. 定義選單 metadata
  3. 在選單上調用 .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')    
    
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。