在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

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

相关文章
|
算法 数据挖掘 调度
隐语实训营-第3讲:详解隐私计算框架的架构和技术要点
主要介绍隐语的隐私计算架构,并对每个模块进行拆解、分析,以期望不同使用者找到适合自己的模块,快速入手。
323 4
|
API 数据处理 数据安全/隐私保护
curl基础用法
curl基础用法
|
传感器 物联网 5G
物联网(AIOT)--下一个技术风口
我们现在身边越来越多的硬件设备正在被嵌入芯片、软件,从而实现更多的功能和更紧密的联系。 物联网其实是借助互联网的力量,实现万物互联。
1140 0
|
监控 数据可视化 定位技术
2024年最强看板工具大对比:哪款最适合公司团建旅游活动策划?
本文介绍了5款看板工具(板栗看板、Trello、Asana、Monday.com、ClickUp)及其在公司团建旅游策划中的应用,通过具体案例展示了如何利用这些工具高效管理活动的各个环节,包括目的地规划、任务分配、预算管理、日程安排、团队沟通与反馈等,旨在提升团队协作效率和活动策划质量。
2024年最强看板工具大对比:哪款最适合公司团建旅游活动策划?
|
安全 数据挖掘 API
快手小店详情API接口的获取与应用
在数字化时代,电商平台竞争激烈,API接口作为连接不同系统和服务的桥梁,已成为电商生态中不可或缺的一部分。本文详细介绍快手小店详情API接口的获取与应用,帮助开发者和企业提升业务效率和用户体验。涵盖API接口定义、主要应用场景、注册与认证流程、调用方法及实际应用案例,提供最佳实践建议。
546 1
|
Rust 开发工具 开发者
Ruff代码分析
Ruff代码分析
457 0
|
JSON API 数据格式
如何使用Python开发1688商品详情API接口?
本文介绍了如何使用Python开发1688商品详情API接口,获取商品的标题、价格、销量和评价等详细信息。主要内容包括注册1688开放平台账号、安装必要Python模块、了解API接口、生成签名、编写Python代码、解析返回数据以及错误处理和日志记录。通过这些步骤,开发者可以轻松地集成1688商品数据到自己的应用中。
223 1
|
消息中间件 存储 监控
Kafka 消息保留策略及其影响详解
Kafka 消息保留策略及其影响详解
761 0
|
存储 安全 算法
【C++ 包装器类 std::atomic 】全面入门指南:深入理解并掌握C++ std::atomic 原子操作 的实用技巧与应用
【C++ 包装器类 std::atomic 】全面入门指南:深入理解并掌握C++ std::atomic 原子操作 的实用技巧与应用
1570 1
|
网络协议 算法
gRPC源码分析(一):gRPC的系统调用过程
- 分析PB生成的对应文件 - 运行server - 运行client
358 0