Abp.vNext 权限备注
Abp 内部是基于 asp.net core 基于 策略的 授权方式,每个权限为一个策略
权限分为:
1、定义权限(先定义权限组,后添加权限),每个模块都应该创建一个PermissionDefinitionProvider的派生类。
public class TestPermissionDefinitionProvider : PermissionDefinitionProvider
{
public override void Define(IPermissionDefinitionContext context)
{
//AddGroup([NotNull] string name, ILocalizableString displayName = null);
var testGroup = context.AddGroup("TestGroup");
//public virtual PermissionDefinition AddPermission(string name, ILocalizableString displayName = null)
testGroup.AddPermission("TestPermission1");
}
}
2、定义权限值来源(系统默认提供三类:Client,Role,User,分别用于基于客户端、基于角色、基于用户授权) ,只要实现IPermissionValueProvider 接口即可
public class RolePermissionValueProvider : PermissionValueProvider
{
public const string ProviderName = "Role"; public override string Name => ProviderName; public RolePermissionValueProvider(IPermissionStore permissionStore)
: base(permissionStore)
{ } public override async Task<PermissionGrantResult> CheckAsync(PermissionValueCheckContext context)
{
var roles = context.Principal?.FindAll(AbpClaimTypes.Role).Select(c => c.Value).ToArray();
if (roles == null || !roles.Any())
{
return PermissionGrantResult.Undefined;
} foreach (var role in roles)
{
if (await PermissionStore.IsGrantedAsync(context.Permission.Name, Name, role))
{
return PermissionGrantResult.Granted;
}
} return PermissionGrantResult.Undefined;
}
} 然后添加到权限选项中
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddAuthorization(); context.Services.AddSingleton<IAuthorizationHandler, PermissionRequirementHandler>(); Configure<PermissionOptions>(options =>
{
options.ValueProviders.Add<UserPermissionValueProvider>();
options.ValueProviders.Add<RolePermissionValueProvider>();
options.ValueProviders.Add<ClientPermissionValueProvider>();
});
}
3、默认实现中,权限授权信息保存在 IPermissionStore 中 ,必须实现这个接口提供正确的授权信息。如
public class FakePermissionStore : IPermissionStore, ITransientDependency
{
public Task<bool> IsGrantedAsync(string name, string providerName, string providerKey)
{
var result = name == "TestPermission1" &&
providerName == UserPermissionValueProvider.ProviderName &&
providerKey == AuthTestController.FakeUserId.ToString(); return Task.FromResult(result);
}
}
4、在需要授权的地方加上授权标记就可以了 。
Abp.vNext 权限备注的更多相关文章
- Abp VNext权限定义
在Shop.Application.Contracts项目中Permissions目录下ShopPermissions定义权限名 namespace Shop.Permissions { public ...
- [Abp vNext微服务实践] - 前后端分类
一.前景 abp vNext是ABP 开源 Web应用程序框架,是abp的新一代开源web框架.框架完美的集成.net core.identity server4等开源框架,适用于构建web应用程序和 ...
- [Abp vNext 源码分析] - 7. 权限与验证
一.简要说明 在上篇文章里面,我们在 ApplicationService 当中看到了权限检测代码,通过注入 IAuthorizationService 就可以实现权限检测.不过跳转到源码才发现,这个 ...
- abp vnext 开发快速入门 3 实现权限控制
上篇讲了abp vnext 实现了简单的增加操作的例子.删除更新查询基本类似,这里就不讲了,接下来说下如何实现角色权限控制. 再说之前,先说下如果想更加透彻的理解abp vnext的权限控制,最好是先 ...
- [Abp vNext微服务实践] - 添加中文语言
简介 abp vNext中提供了多语言功能,默认语言是英文,没有提供中文语言包.在业务开发中,定义权限后需要用中文的备注提供角色选择,本篇将介绍如何在abp vNext中加入中文语言. step1:添 ...
- 用abp vNext快速开发Quartz.NET定时任务管理界面
今天这篇文章我将通过实例代码带着大家一步一步通过abp vNext这个asp.net core的快速开发框架来进行Quartz.net定时任务调度的管理界面的开发.大伙最好跟着一起敲一下代码,当然源码 ...
- [Abp vNext 源码分析] - 6. DDD 的应用层支持 (应用服务)
一.简要介绍 ABP vNext 针对于应用服务层,为我们单独设计了一个模块进行实现,即 Volo.Abp.Ddd.Application 模块. PS:最近博主也是在恶补 DDD 相关的知识,这里推 ...
- [Abp vNext 源码分析] - 11. 用户的自定义参数与配置
一.简要说明 文章信息: 基于的 ABP vNext 版本:1.0.0 创作日期:2019 年 10 月 23 日晚 更新日期:暂无 ABP vNext 针对用户可编辑的配置,提供了单独的 Volo. ...
- ABP vNext
一.简要介绍# ABP vNext 是 ABP 框架作者所发起的新项目,截止目前 (2019 年 8 月 20 日) 已经拥有 1400 多个 Star,最新版本号为 v 0.19.0,可以尝试用于生 ...
随机推荐
- PyTorch in Action: A Step by Step Tutorial
PyTorch in Action: A Step by Step Tutorial PyTorch in Action: A Step by Step Tutorial Installation ...
- 解决 flannel.1 interface state DOWN
ip a 查看结果 flannel.1 i state UNKNOWN 并且五 inet 发现日志 device (flannel.1): state change: unmanaged -> ...
- sys模块
#python run_case.py #在terminal中执行.py文件 在terminal中执行.py文件: 注: 无法使用terminal来打开那个文件 会显示如下:python: can't ...
- 对于react中rredux的理解
1.什么是redux? redux是一个应用数据流框架,主要作用是对于应用状态的管理 2.reducer特点 : (1)默认的state (2)state是只可读不可修改 (3)必须返回一个纯函数 3 ...
- ROS中使用Kinect摄像头和usb摄像头
1.安装的一些包 kinect用的freenect: $ sudo apt-get install ros-indigo-freenect-launch $ sudo apt-get install ...
- LeetCode Weekly Contest 121
上周因为感冒没有刷题,两个星期没有刷题,没手感了,思维也没有那么活跃了,只刷了一道,下个星期努力. 984. String Without AAA or BBB Given two integers ...
- linux目录结构特点
#####linux目录结构特点一切从根开始linx中每个设备可以挂载在任何目录上面磁盘/设备/分区没有挂载 无法使用 举例-linux下面使用光盘###1.把光盘放入到光驱中 ###2.linux中 ...
- idea提交git报错Push rejected: Push to origin/master was rejected
参考https://blog.csdn.net/u012934325/article/details/71023241
- MySQL:Download Connector/Python
MySQL Connector / Python是用于Python平台和开发的标准化数据库驱动程序. 此外,MySQL Connector / Python 8.0支持使用MySQL Server 8 ...
- 解决js的 Math取正弦值 余弦值不准确的问题
//角度 var vAngle=90: //正弦值 var vSin=Math.round(Math.sin((vAngle * Math.PI/180)) * 1000000) / 1000000 ...