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、在需要授权的地方加上授权标记就可以了 。

最新文章

  1. MapReduce剖析笔记之八: Map输出数据的处理类MapOutputBuffer分析
  2. js性能优化-事件委托
  3. 如何实现:录制视频聊天的全过程? 【低调赠送:QQ高仿版GG 4.3 最新源码】
  4. win2008server R2 x64 部署.net core到IIS上出现【Failed to load the dll from [C:\Program Files\dotnet\host\fxr\1.0.1\hostfxr.dll], HRESULT: 0x80070057】错误
  5. Framework7--Test
  6. easyui form submit 不提交
  7. qml json 解析到 ListView
  8. Gerrit清单库配置(转载)
  9. 【转】移动web资源整理
  10. ArcGis:vs c#编程遇到问题The specified filename is invalid
  11. poj Cash Machine
  12. 徒手用Java来写个Web服务器和框架吧&lt;第三章:Service的实现和注册&gt;
  13. Linux进行AES加密每次结果都不一致并且解密失败报错
  14. Kilani and the Game-扩散形式的搜索
  15. sql数据库快照与恢复 规则绑定
  16. Linux下chkconfig命令介绍
  17. DOCKER解析(转)
  18. openstack之cinder_backup对接ceph存储
  19. shell 脚本部分变量含义
  20. 手机调试 fiddler

热门文章

  1. jQuery的deferred对象使用详解
  2. THINKPHP and or 模板语句书写
  3. Java线程池ThreadPoolExecutor原理和用法
  4. Derivative of Softmax Loss Function
  5. MSSQL 漏洞利用与提权
  6. TCP/IP学习
  7. Python装饰器的另类用法
  8. 流程与IT管理是未来IT行业发展的必经之路
  9. .net 去除特殊字符
  10. svn hotcopy backup