在我们为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中注册才有效果,这个问题有哪位大神可以讨论一下吗?

最新文章

  1. 部分Android手机拍照后照片被旋转的解决方案
  2. Myeclipse 的hadoop环境搭建
  3. NLog配置文件根节点
  4. HDU 1715 大菲波数
  5. Html5工具
  6. iphone Dev 开发实例9:Create Grid Layout Using UICollectionView in iOS 6
  7. 代码记录:使用Aforge.net让视频图像反转180度
  8. Spark 1.3.0 单机安装
  9. Codevs 1904 最小路径覆盖问题
  10. Linux下多任务间通信和同步-概述
  11. TFS 用户与组管理(转)
  12. AFNetworking3.0 POST请求
  13. 有关java调用批处理文件
  14. JavaScript面试技巧(二):JS-Web-API
  15. 如何查找Power BI本地报表服务器产品密钥
  16. decltype typename
  17. 决策树(ID3,C4.5,CART)原理以及实现
  18. Spring Schedule整合配置
  19. linux新内核的freeze框架以及意义【转】
  20. MySQL binlog_format (Mixed,Statement,Row)[转]

热门文章

  1. File 类的 getCanonicalFile( ) 和 getAbsoluteFile( ) 区别
  2. Ubuntu:双(多)网卡绑定(bonding)配置
  3. android评分条RatingBar自定义设置
  4. CentOS7 设置软件镜像源
  5. C#获取路径总结
  6. SpringBoot(十五)-- 修改SpringBoot默认的错误页面
  7. 四、K3 Cloud 开发插件《K3 Cloud事件、方法、函数》
  8. C#WinForm应用程序中嵌入ECharts图表
  9. [原]Jenkins(十二)---jenkins管理员用户无法登陆解决办法Access Denied
  10. Spark Multilayer perceptron classifier (MLPC)多层感知器分类器