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中注册才有效果,这个问题有哪位大神可以讨论一下吗?
最新文章
- 部分Android手机拍照后照片被旋转的解决方案
- Myeclipse 的hadoop环境搭建
- NLog配置文件根节点
- HDU 1715 大菲波数
- Html5工具
- iphone Dev 开发实例9:Create Grid Layout Using UICollectionView in iOS 6
- 代码记录:使用Aforge.net让视频图像反转180度
- Spark 1.3.0 单机安装
- Codevs 1904 最小路径覆盖问题
- Linux下多任务间通信和同步-概述
- TFS 用户与组管理(转)
- AFNetworking3.0 POST请求
- 有关java调用批处理文件
- JavaScript面试技巧(二):JS-Web-API
- 如何查找Power BI本地报表服务器产品密钥
- decltype typename
- 决策树(ID3,C4.5,CART)原理以及实现
- Spring Schedule整合配置
- linux新内核的freeze框架以及意义【转】
- MySQL binlog_format (Mixed,Statement,Row)[转]
热门文章
- File 类的 getCanonicalFile( ) 和 getAbsoluteFile( ) 区别
- Ubuntu:双(多)网卡绑定(bonding)配置
- android评分条RatingBar自定义设置
- CentOS7 设置软件镜像源
- C#获取路径总结
- SpringBoot(十五)-- 修改SpringBoot默认的错误页面
- 四、K3 Cloud 开发插件《K3 Cloud事件、方法、函数》
- C#WinForm应用程序中嵌入ECharts图表
- [原]Jenkins(十二)---jenkins管理员用户无法登陆解决办法Access Denied
- Spark Multilayer perceptron classifier (MLPC)多层感知器分类器