在Identity框架中使用RoleBasedAuthorization

本文将介绍在 Identity 框架中如何使用 Sang.AspNetCore.RoleBasedAuthorization[1] 库。

核心介绍

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 运行项目。

a007fb041d72bd908ca0d2e62272eeca.png

API

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

54e54979d119a83fbd0fd2a5ab7a3e32.png

初始化

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

最后

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

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

References

[1] Sang.AspNetCore.RoleBasedAuthorization: https://www.nuget.org/packages/Sang.AspNetCore.RoleBasedAuthorization

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/281548.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2016年印度公有云服务市场将达13亿美元

根据IT咨询公司Gartner最新调查数据显示&#xff0c;2016年印度公有云服务市场预计将增长35.9%&#xff0c;达到13亿美元。 增长最快的是云系统基础设施即服务&#xff08;IaaS&#xff09;&#xff0c;2016年预计将增长45.5%&#xff1b;其次是平台即服务&#xff08;PaaS&…

PAT 1042. 字符统计

1042. 字符统计 请编写程序&#xff0c;找出一段给定文字中出现最频繁的那个英文字母。 输入格式&#xff1a; 输入在一行中给出一个长度不超过1000的字符串。字符串由ASCII码表中任意可见字符及空格组成&#xff0c;至少包含1个英文字母&#xff0c;以回车结束&#xff08;回车…

Magicodes.IE 2.7.0-beta发布

2.7.0-beta2022.10.27使用SixLabors.ImageSharp替代System.Drawing&#xff0c;感谢linch90 &#xff08;见pr#454&#xff09;2.6.92022.10.26fix: 动态数据源导出到多个sheet的问题 &#xff08;见#449&#xff09;2.6.82022.10.18Excel模板导出添加API&#xff0c;以支持通过…

光伏逆变器“领跑”:不止于技术

从无到有&#xff0c;从效率比拼到突破99%&#xff0c;在跟进速度上没话说的国内光伏逆变器企业难免深陷“价格战”、同质化的泥潭。随着“领跑者”计划跃居光伏主流&#xff0c;嗅到市场红利的企业再次蜂拥而至。 目前&#xff0c;鉴衡认证发布的第一批光伏并网逆变器“领跑者…

Ubuntu 18.04上Qmmp安装教程

Qmmp&#xff0c;一个开源的基于Qt的多媒体播放器。它具有多种音频文件格式支持&#xff0c;DSP效果&#xff0c;视觉效果;输出系统支持&#xff08;OSS4&#xff08;FreeBSD&#xff09;&#xff0c;ALSA&#xff08;Linux&#xff09;&#xff0c;Pulse Audio&#xff0c;JAC…

android自动跑马灯,Android-最强跑马灯

Android--最强跑马灯Android 跑马灯已经有很多版本&#xff0c;从最基本的TextView&#xff0c;到重写TextView使TextView取消焦点限制&#xff0c;还有重写TextView利用ScrollTo方法写的&#xff0c;基本都能满足一般需要。然而在使用过程中&#xff0c;发现一些意外---有时会…

python:软件目录结构规范

为什么要设计好目录结构&#xff1f; “设计项目目录结构”&#xff0c;就和“代码编码风格”一样&#xff0c;属于个人风格问题。对于这种风格上的规范&#xff0c;一直都存在两种态度&#xff1a; 1.一种认为&#xff0c;这种个人风格问题“无关紧要”。理由是能让程序work就…

开启智能生活新时代 河北省智慧社区建设从各个击破

智慧社区作为智慧城市的重要组成部分&#xff0c;是城市智慧落地的触点&#xff0c;是城市管理、政务服务和市场服务的载体。随着智慧城市的推广以及新一代技术的普及&#xff0c;智慧社区的项目必将迎来新一轮的快速发展。2016年智慧社区成为企业业务落地的承载点&#xff0c;…

C# WPF 表格控件的前后台数据交互?

概述GridControl控件使用我们已经进行了实例讲解&#xff0c;这节内容我们列举一个特殊的应用场景&#xff1a;表格中有一列CheckBox&#xff0c;默认都处于勾选状态&#xff0c;当用户通过界面操作后&#xff0c;我们要确保用户至少选择了一项&#xff0c;相当于一次数据验证&…

Java(C#)基础差异-语法

1、long类型 Java long类型&#xff0c;若赋值大于int型的最大值&#xff0c;或小于int型的最小值&#xff0c;则需要在数字后加L或者l&#xff0c;表示该数值为长整数&#xff0c;如long num2147483650L。 举例如下&#xff1a; public static void main(String[] args) {/** …

android防止左向右滑出程序,Android——ViewPager禁止左右滑动的实现

目录1 背景用ViewPagerBottomNavigationView多个Fragment快速搭建的页面切换架构&#xff0c;一个有四个页面&#xff0c;因为测试需要&#xff0c;需要屏蔽掉中间的两个&#xff0c;做法是&#xff1a;设置不可点击选择&#xff1a;xml布局文件中&#xff0c;BottomNavigation…

Yii2 的快速配置 api 服务 yii2-fast-api

yii2-fast-api yii2-fast-api是一个Yii2框架的扩展&#xff0c;用于配置完善Yii2&#xff0c;以实现api的快速开发。 此扩展默认的场景是APP的后端接口开发&#xff0c;因此偏向于实用主义&#xff0c;并未完全采用restfull的标准&#xff0c;方便前端开发处理接口数据以及各种…

.NET6打包部署到Windows Service

1.安装Nuget包安装以下nuget包支持windows service<PackageReference Include"Microsoft.AspNetCore.Hosting.WindowsServices" Version"6.0.10" /> <PackageReference Include"Microsoft.Extensions.Hosting.WindowsServices" Version…

传统家电在智能家居变革的五大优势

而在众多向智能家居领域转型变革的企业中&#xff0c;看似落后的传统家电企业&#xff0c;却占据着一定的优势。 产品优势 传统家电企业在产品上的优势主要体现在企业拥有产品本身的设计、技术、生产、制造和营销渠道&#xff0c;其产品不论是从外观设计、零件制造还是零件组装…

《Apache Kafka实战》读书笔记-调优Kafka集群

《Apache Kafka实战》读书笔记-调优Kafka集群 作者&#xff1a;尹正杰 版权声明&#xff1a;原创作品&#xff0c;谢绝转载&#xff01;否则将追究法律责任。 一.确定调优目标 1>.常见的非功能性要求 一.性能&#xff08;performance&#xff09;最重要的非功能性需求之一。…

android emoji unicode编码表,unicode编码

unicode编码app是一款字符查找客户端应用&#xff0c;通过unicode编码可以方便寻找特定字符&#xff0c;查看字符表情详细的描述&#xff0c;并且利用unicode编码就可以快捷复制任意unicode编码&#xff0c;提高开发效率&#xff0c;非常的实用&#xff0c;快来下载unicode编码…

物联网商机诱人 芯片商大力搭建生态系统

应用需求变化多端的物联网&#xff0c;虽具备庞大的发展潜力及应用商机&#xff0c;但由于市场过于分散&#xff0c;几乎没有杀手应用可言&#xff0c;因此对有意耕耘相关市场的半导体业者而言&#xff0c;如何借力使力&#xff0c;寻找盟友共同搭建出的生态系统&#xff0c;遂…

ASP.NET Core 6框架揭秘实例演示[30]:利用路由开发REST API

借助路由系统提供的请求URL模式与对应终结点之间的映射关系&#xff0c;我们可以将具有相同URL模式的请求分发给与之匹配的终结点进行处理。ASP.NET的路由是通过EndpointRoutingMiddleware和EndpointMiddleware这两个中间件协作完成的&#xff0c;它们在ASP.NET平台上具有举足轻…

数据库(二)tab补全功能,使数据库支持简体中文,日志管理,备份脚本

一、如何在MySQL数据库中使用tab键补全功能 1.修改主配置文件/etc/my.cnf vim /etc/my.cnf [mysql] #no-auto-rehash auto-rehash 2.重启MySQL服务&#xff0c;登录测试 /etc/init.d/mysqld restart mysql -uroot -p (可在数据库中使用tab键&#xff09; 3.&#xff1b;临时支持…

php new self()关键字的用法

今天开框架源码&#xff0c;发现有用到new self()的用法 有点不懂 在网上查了一下&#xff0c;给大家说一下&#xff1a; 在类中 self的用法 和this的用法差不多 &#xff0c; php new self() 一般在类内部使用&#xff0c;作用是对自身类实例化&#xff0c;下面给个实例讲解…