1. 程式人生 > >Orchard Core 自定義許可權配置

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中註冊才有效果,這個問題有哪位大神可以討論一下嗎?