問題
同事繼承 Abp 範例中的 AuthorAppService ,將 UpdateAsync 設定成 virtual ,允許子類別去覆寫。
子類別在覆寫的 UpdateAsync
上,加上另個 Authorize 的設定,
結果要執行UpdateAsync
變成需要有 2 個 Policy 的權限才可以執行。
測試
範例的AuthorAppService
,其中的UpdateAsync
設定成virtual
,如下,
1 | [ ] |
因為要多加個BookStorePermissions.Authors.Edit2
Permission,
所以要在 BookStorePermissions中的Authors Class
中加入
1 | public static class BookStorePermissions |
在BookStorePermissionDefinitionProvider
中也要加入Edit2
,authorsPermission.AddChild(BookStorePermissions.Authors.Edit2, L("Permission:Authors.Edit"));
,如下,
1 | public class BookStorePermissionDefinitionProvider : PermissionDefinitionProvider |
接著實作要繼承AuthorAppService
的子類別CustomAuthorAppService
,
1 | [ ] |
新增一個MyPermissionChecker
來查看執行UpdateAsync
會需要那些的 Policy,
1 | public class MyPermissionChecker : IPermissionChecker |
再到ApplicationModule.cs
中設定要以MyPermissionChecker
取代原生的PermissionChecker
,CustomAuthorAppService
取代原本的AuthorAppService
,如下,
1 | public override void ConfigureServices(ServiceConfigurationContext context) |
測試結果
透過 Swagger 來測試時,在MyPermissionChecker
的IsGrantedAsync
方式設中斷點,
可以發現檢查順序為BookStore.Authors
->BookStore.Authors.Edit
->BookStore.Authors.Edit2
->BookStore.Authors.Edit
->BookStore.Authors
所以可以發現,Method 上的Authorize
的設定是疉加的效果。
所以如果是要覆寫的話,就使用原本的Authorize
,不用特別再加一個新的Authorize
。
或是新增另一個 Method 去設定不同的Authorize
。
這個是 ASP.NET 原生的機制,不管是 Abp or ASP.NET 都是一樣的狀況哦。