在Identity框架中使用RoleBasedAuthorization

简介: 本文将介绍在 Identity 框架中如何使用 [Sang.AspNetCore.RoleBasedAuthorization](https://www.nuget.org/packages/Sang.AspNetCore.RoleBasedAuthorization) 库。

核心介绍

Identity 和 jwt 的基本配置我们在这里不再赘述,可以参考最后的项目样例。核心的代码主要为 IRolePermission 的实现。

internal class MyRolePermission : IRolePermission
{

    private readonly IMemoryCache _memoryCache;

    private readonly RoleManager<MyRole> _roleManager;

    private readonly string cachekey = "Role_Permission_";

    public MyRolePermission(IMemoryCache memoryCache, IServiceProvider _sp)
    {
        _memoryCache = memoryCache;
        _roleManager = _sp.CreateScope().ServiceProvider.GetRequiredService<RoleManager<MyRole>>();
    }

    public async Task<List<Claim>> GetRolePermissionClaimsByName(string roleName)
    {
        var claims = await _memoryCache.GetOrCreateAsync(cachekey + roleName, async (e) =>
        {
            e.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(3600);
            e.SlidingExpiration = TimeSpan.FromMinutes(10);//10分钟滑动过期
            var myrole = await _roleManager.FindByNameAsync(roleName);
            if (myrole is null) return new List<Claim>();
            var list = await _roleManager.GetClaimsAsync(myrole);
            return list;
        });
        return claims.ToList();
    }
}

这里需要注意的是 IRolePermission 是 Singleton 单例模式,服务在第一次请求时被创建,其后的每次请求都沿用这个已创建的服务。而 RoleManager 是 Scoped 作用域模式,服务在每次请求时被创建,整个请求过程中都贯穿使用这个创建的服务。所以在 MyRolePermission 中因为其生命周期不同,无法直接注入使用。

使用展示

完整的代码可以查看仓库 https://github.com/sangyuxiaowu/IdentityRBAC

克隆仓库后修改 Program.cs L45 的数据库相关配置,然后迁移 Update-Database 运行项目。

API

访问/User/init创建初始用户和角色。admin,user,supadmin,其密码均为123456。

初始化

然后通过/User/check检查用户密码,获取access_token,然后更换不同的用户来测试 Values 这个 Controller 的资源访问。

最后

本文相关仓库感兴趣的同学可以查阅:
https://github.com/sangyuxiaowu/IdentityRBAC

如有错漏之处,敬请指正。

相关文章
|
Web App开发 监控 安全
使用注解 @requires 给 SAP CAP CDS 模型添加权限控制
使用注解 @requires 给 SAP CAP CDS 模型添加权限控制
|
2月前
|
存储 开发框架 JSON
ASP.NET Core 标识(Identity)框架系列(二):使用标识(Identity)框架生成 JWT Token
ASP.NET Core 标识(Identity)框架系列(二):使用标识(Identity)框架生成 JWT Token
SAP Cloud for Customer 2102版本如何使用Key User Tool创建扩展字段 - extension field
SAP Cloud for Customer 2102版本如何使用Key User Tool创建扩展字段 - extension field
SAP Cloud for Customer 2102版本如何使用Key User Tool创建扩展字段 - extension field
SAP S/4HANA key user tool extensibility原理
Reasons of different behavior in “UI and Reports” list
SAP S/4HANA key user tool extensibility原理
|
Web App开发 JavaScript 前端开发
自开发Web应用和SAP Customer Data Cloud Identity服务的集成
今天的文章继续由SAP成都研究院的云时代女王,Aviva给大家分享关于SAP Customer Data Cloud的一些使用经验。 Aviva之前的文章可以在本文末尾处获得。 下面是她的正文。 * 大家好,我是Aviva。
|
前端开发 .NET 中间件
Identity Server 4 - Hybrid Flow - MVC客户端身份验证
预备知识 可能需要看一点点预备知识 OAuth 2.0 不完全简介: https://www.cnblogs.com/cgzl/p/9221488.html OpenID Connect 不完全简介: https://www.
2177 0
|
JSON 前端开发 .NET
Identity Server 4 - Hybrid Flow - Claims
前一篇 Identity Server 4 - Hybrid Flow - MVC客户端身份验证: https://www.cnblogs.com/cgzl/p/9253667.html Claims 我不知道怎么样翻译这个词比较好, 所以我一般就不翻译了.
1788 0
|
Web App开发 安全 API
Identity Server 4 预备知识 -- OAuth 2.0 简介
OAuth 2.0 简介 OAuth有一些定义: OAuth 2.0是一个委托协议, 它可以让那些控制资源的人允许某个应用以代表他们来访问他们控制的资源, 注意是代表这些人, 而不是假冒或模仿这些人. 这个应用从资源的所有者那里获得到授权(Authorization)和access token, 随后就可以使用这个access token来访问资源. (这里提到的假冒或模仿就是指在客户端复制一份用户名和密码,从而获取相应的权限)。
1709 0