Orchard Core 自定義許可權配置
在我們為Orchard Core配置了一個新的Module之後,我們要考慮的是誰可以訪問這個Module,那麼這裡就涉及到了一個許可權的配置。如下圖,添加了自定義的許可權:
Orchard Core原始碼:https://github.com/OrchardCMS/OrchardCore
我們先看原始碼可以幫助我們瞭解這是如何做的。到src---->OrchardCore.Modules下面找到OrchardCore.Roles或者OrchardCore.Contents(也可以參考其他模組)。
以OrchardCore.Roles為例,在控制器中找到了如下一段,這應該就是控制權限的。
再找到當前模組下的Permissions.cs這個類,發現這個Permissions.cs這個類實現了IPermissionProvider這個介面,並且在Startup.cs中註冊了這個Permissions.cs
按照這個思路,我們也可以自己自定義一個許可權了。先建一個Permissions.cs類,實現IPermissionProvider介面
public class Permissions : IPermissionProvider { public static readonly Permission ManageRoles = new Permission("ManageRoles", "Managing");//首先一定要有一個基本的許可權 public static readonly Permission APIRoles = new Permission("APIRoles", "API", new[] { ManageRoles });//然後定義一個許可權,這個許可權隱含(包含)上面那個許可權,這個好像是規定這麼寫的,不然會報錯 public IEnumerable<PermissionStereotype> GetDefaultStereotypes()//為對應的角色預設勾不勾選自定義的許可權,下面預設不勾選,如果要預設勾選,那麼在Name的下一行加上Permissions = new[] { XXX } {return new[] { new PermissionStereotype { Name = "Administrator", }, new PermissionStereotype { Name = "Editor", }, new PermissionStereotype { Name = "Moderator" }, new PermissionStereotype { Name = "Author", }, new PermissionStereotype { Name = "Contributor", }, new PermissionStereotype { Name = "Authenticated", }, new PermissionStereotype { Name = "Anonymous", }, }; } public IEnumerable<Permission> GetPermissions() { return new[] { ManageRoles, APIRoles }; } }
在Controller中對需要許可權驗證的地方加上
public async Task<IActionResult> Index()
{
if (!await _authorizationService.AuthorizeAsync(User, Permissions.APIRoles))
{
return Unauthorized();
}
return Content("hihihi");
}
然後在Startup.cs的ConfigureServices中加上如下程式碼
services.AddScoped<IPermissionProvider, WarehouseAPI.Permissions>();
在原始碼中,Permissions.cs是註冊在了當前模組的Startup.cs中,我一開始也是,但是發現沒有註冊進去,之後在web專案中的Startup.cs中註冊才有效果,這個問題有哪位大神可以討論一下嗎?