使用RoleBasedAuthorization实现基于用户角色的访问权限控制

本文将介绍如何通过 Sang.AspNetCore.RoleBasedAuthorization[1] 库实现 RBAC 权限管理。

使用介绍

Step 1

添加库 Sang.AspNetCore.RoleBasedAuthorization

Install-Package Sang.AspNetCore.RoleBasedAuthorization

Step 2

在 Program.cs 中添加

builder.Services.AddSangRoleBasedAuthorization();

Step 3

在需要进行授权检查的接口或 Controller 处添加 ResourceAttribute 标记。

[Resource("资源")]
[Route("api/[controller]")]
[ApiController]
public class RolesController : ControllerBase
{
}
/// <summary>
/// 删除-数值
/// </summary>
/// <param name="id"></param>
[Resource("删除-数值")] //[Resource("删除", Action = "数值")]
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{return Ok("删除-数值");
}

这里用于描述访问的角色需要的资源要求

•填写单独的整个资源 “[Resource("资源")]”•或使用 Action 设置资源下的某个操作 “[Resource("资源", Action = "操作")]”•也可以使用形如“[Resource("资源-操作")]”直接设置资源和操作

Step 4

完成以上操作后,授权检查,将检查User.Claims是否存在对应的Permission

需要为用户添加对应的 Claims ,可以在生成 jwt token 时直接包含。

当然也可以使用中间件读取对应的角色,在授权检查前添加,可以自己实现也可以使用该库提供的下一节介绍的功能。

var claims = new List<Claim>
{new Claim(ClaimTypes.NameIdentifier, "uid"),new Claim(ClaimTypes.Name,"用户名"),new Claim(ClaimTypes.Email,"test@exp.com"),new Claim(ClaimTypes.Role, "user"),new Claim(ResourceClaimTypes.Permission,"查询"),
};
var token = new JwtSecurityToken("Issuer","Audience",claims,expires: DateTime.UtcNow.AddSeconds(3600),signingCredentials: credentials);

注意:如果角色名为SangRBAC_Administrator,将不进行授权检查。

可选中间件

使用提供的添加角色权限中间件,你也可以单独使用该组件。

Step 1

实现IRolePermission,通过角色名获取该角色权限列表

public class MyRolePermission : IRolePermission
{public Task<List<Claim>> GetRolePermissionClaimsByName(string roleName){List<Claim> list = new();// you codereturn Task.FromResult(list);}
}

然后添加服务。

builder.Services.AddRolePermission<MyRolePermission>();

Step 2

app.UseAuthorization();app.UseAuthentication()后启用这个中间件。

app.UseAuthentication();
app.UseRolePermission();
app.UseAuthorization();

Option

UseRolePermission

1. option.UserAdministratorRoleName:

设置一个自定义角色,使其拥有 SangRBAC_Administrator 一样的系统内置超级管理员权限。

2. option.Always:

是否一直检查并执行添加,默认只有在含有 ResourceAttribute 要进行权限验证时,此次访问中间件才启动添加权限功能。

app.UseRolePermission(opt => {// 设置系统内置超级管理员的rolenameopt.userAdministratorRoleName = "supadmin";option.Always = true;
});

Demo

•简单示例 https://github.com/sangyuxiaowu/Sang.AspNetCore.RoleBasedAuthorization/tree/main/TestDemo•在 Identity 中使用 https://github.com/sangyuxiaowu/IdentityRBAC

References

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

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

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

相关文章

【2018-11-15】中证1000指数的估值详情

中证1000指数选取中证500和沪深300指数样本股以外的&#xff0c;流动性好的1000只股票组成&#xff0c;与沪深300 和中证500 等形成互补。 中证1000的个股大多数是由市场上流通市值排名在 800 到 1800 名之间的个股组成&#xff0c;是一个适用范围较广的小盘指数。 中证1000的…

[Leetcode Week15]Populating Next Right Pointers in Each Node

Populating Next Right Pointers in Each Node 题解 原创文章&#xff0c;拒绝转载 题目来源&#xff1a;https://leetcode.com/problems/populating-next-right-pointers-in-each-node/description/ Description Given a binary tree struct TreeLinkNode {TreeLinkNode *left…

php 数组 1 开始,php数组使用1

1、array_values($arr) 将数组转换成索引数组$arr1 [id>10,name>杨过,sex>male,salary>8900];echo .var_export(array_values($arr1),true).;2、array_column($arr,$col,$boll); 获取多维数组的列表组成的数组。$arr2 [];$arr2 [[id>10,name>杨过,sex>…

印度光伏巨头Adani与华为签署500MW采购合同

日前&#xff0c;印度光伏巨头Adani与华为签订了采购合同。Adani未来一年的项目全部采用华为FusionSolar3.0智能光伏解决方案&#xff0c;首期500MW采购合同已经签署&#xff0c;将采购最新的智能光伏控制器&#xff08;组串逆变器&#xff09;SUN2000-43KTL、数据采集器SmartL…

宣布 .NET MAUI 支持 .NET 7 RC 2

点击上方蓝字关注我们&#xff08;本文阅读时间&#xff1a;6分钟)支持 .NET 7 Release Candidate 2 的 .NET 多平台应用程序 UI (MAUI) 现在可在 Windows 和 Mac 上的 Visual Studio 17.4 Preview 4 中使用。RC2 的主要主题是质量和对带有 iOS 16 的 Xcode 14 的 .NET 支持。此…

linux c文件操作,Linux C 文件的输入/输出操作

10.1 文件I/O操作概述在Linux系统中&#xff0c;文件I/O操作可以分为两类&#xff0c;一类是基于文件描述符的I/O操作&#xff0c;另一类是基于数据流的I/O操作。10.1.1 文件描述符简介在文件操作一章中&#xff0c;也经常提到文件描述符这个概念。所谓文件描述符&#xff0c;就…

个人中心标签页导航

新页面userbase.html,用<ul ><li role"presentation"> 实现标签页导航。<ul class"nav nav-tabs"> <li role"presentation"><a href"#">Home</a></li> <li role"presentation&qu…

智慧城市免费WiFi覆盖怎么实施?武邑开启智慧生活模式

“真没想到武邑这个国家级贫困县也能够随地使用无线网络&#xff0c;我初次考察就喜欢上了这里。”准备前来武邑县投资的客商王先生说。日前&#xff0c;随着县城广场、商场等公共场所的免费WiFi覆盖&#xff0c;及移动电子商务借势O2O的快速发展&#xff0c;衡水市武邑县正在逐…

Uno开发的小游戏

大家好&#xff0c;我是沙漠尽头的狼。刚在微信群里逛&#xff0c;有网友发了Uno的在线小游戏&#xff0c;站长觉得不错&#xff0c;简单分享下&#xff1a;群聊涨见识Uno是什么&#xff1f;使用 C# 和 WinUI 实现像素完美的多平台应用程序&#xff0c;用于构建适用于 Windows、…

sqlplus命令行登录oracle数据库的N种方法盘点

欢迎访问我的个人博客IT废柴&#xff0c;本文永久链接移至&#xff1a;sqlplus命令行登录oracle数据库的N种方法盘点 sqlplus有几种登陆方式Oracle数据库&#xff0c; 比如&#xff1a; 1.以操作系统权限认证的oracle sys管理员登陆 C: > sqlplus "/as sysdba" 2…

拉美光伏新兴市场热潮将至

国际油价下滑对油气生产国的影响是不言而喻的&#xff0c;受此拖累&#xff0c;可再生能源产业发展也承受了一定压力。然而&#xff0c;在多国拥有油气资源的拉美地区&#xff0c;情况却恰恰相反&#xff0c;许多国家的可再生能源产业非但没有受低油价拖累&#xff0c;反而快速…

linux下常见生产脚本,不看后悔的Linux生产服务器Shell脚本分享(2)

一、MySQL的热备份脚本这是MySQL的备份方式之一&#xff0c;脚本如下&#xff1a;#!/bin/bashPATH/usr/local/sbin:/usr/bin:/bin# The Directory of BackupBACKDIR/usr/mysql_backup# The Password of MySQLROOTPASSpassword# Remake the Directory of Backuprm -rf $BACKDIRm…

兄弟连学python——MongoDB相关

1.常用的命令 show dbs 显示数据库列表use dbname 进入dbname数据库&#xff0c;大小写敏感&#xff0c;没有这个数据库也不要紧show collections 显示数据库中的集合&#xff0c;相当于表格2.创建&新增 db.users.save({"name":"lecaf"}) …

WPF-12 路由事件之二

WPF 为我们提供了许多不同的事件处理机制——它们是冒泡、隧道和直接的。这些都称为路由事件直接事件直接在事件源上处理&#xff0c;这个有点像WinForms中的按钮OnClick事件&#xff0c;直接在事件处理程序中处理业务冒泡事件当事件没有被元素&#xff08;比如一个文本框&…

对01背包的分析与理解(图文)

首先谢谢Christal_R的文章(点击转到链接)让我学会01背包 本文较长&#xff0c;但是长也意味着比较详细&#xff0c;希望您可以耐心读完。 题目: 现在有一个背包(容器),它的体积(容量)为V,现在有N种物品(每个物品只有一个),每个物品的价值W[i]和占用空间C[i]都会由输入给出,现在…

linux内核源码剖析 博客,【Linux内存源码分析】页面迁移

页面迁移其实是伙伴管理算法中的一部分&#xff0c;鉴于其特殊性&#xff0c;特地另行分析。它是2007年的时候&#xff0c;2.6.24内核版本开发时&#xff0c;新增碎片减少策略(the fragmentation reduction strategy)所引入的。该策略也称之为反碎片技术(anti-gragmentation)。…

360的下一代SOC是这个样子的

几乎所有大型企业或机构的IT系统中&#xff0c;都会有安全运营中心(SOC)&#xff0c;它是网络安全防护体系从设备部署到系统建设&#xff0c;再到统一管理&#xff0c;这一发展过程的自然产物。但在国内的实际应用中&#xff0c;SOC的问题多多。 首先是数据类型不全&#xff0c…

【转载】利用scipy.misc等库对jpg以及png等图像数据预处理(用于深度学习喂数据)...

http://blog.csdn.net/qq_16949707/article/details/56306720 转载于:https://www.cnblogs.com/tenderwx/p/8057599.html

2018年下半年网络公式考试案例分析真题

阅读以下说明&#xff0c;回答问题1至问题3&#xff0c;将解答填入答题纸对应的解答栏内。【说明】某公司网络划分为两个子网&#xff0c;其中设备A是DHCP服务器&#xff0c;如图3-1所示。 【问题1】(6分&#xff0c;每空2分)DHCP在分配IP地址时使用 (1) 的方式&#xff0c; 而…

哪一个不是linux常用的shell,Linux下查看使用的是哪种shell的方法汇总

查看当前发行版可以使用的shell复制代码代码如下:[rootlocalhost ~]$ cat /etc/shells/bin/sh/bin/bash/sbin/nologin查看当前使用的shell方法一、最常用的查看shell的命令&#xff0c;但不能实时反映当前shell复制代码代码如下:[rootlocalhost ~]$ echo $SHELL/bin/bash二、下…