使用RoleBasedAuthorization实现基于用户角色的访问权限控制
本文将介绍如何通过 Sang.AspNetCore.RoleBasedAuthorization [1] 库实现 RBAC 权限管理有限的访问权限 。
使用介绍 Step 1
添加库 Sang.AspNetCore.RoleBasedAuthorization
Install-PackageSang.AspNetCore.RoleBasedAuthorization
Step 2
在 Program.cs 中添加
builder.Services.AddSangRoleBasedAuthorization;
Step 3
在需要进行授权检查的接口或 Controller 处添加 ResourceAttribute 标记有限的访问权限 。
[Resource("资源")]
[Route("api/[controller]")]
[ApiController]
publicclassRolesController:ControllerBase
/// <summary>
/// 删除-数值
/// </summary>
/// <param name="id"></param>
[Resource("删除-数值")]//[Resource("删除", Action = "数值")]
[}")]
publicIActionResultDelete(intid)
returnOk("删除-数值");
这里用于描述访问的角色需要的资源要求
•填写单独的整个资源 “[Resource("资源")]” •或使用 Action 设置资源下的某个操作 “[Resource("资源", Action = "操作")]” •也可以使用形如“[Resource("资源-操作")]”直接设置资源和操作
Step 4
完成以上操作后,授权检查,将检查 User.Claims 是否存在对应的 Permission 有限的访问权限 。
需要为用户添加对应的 Claims ,可以在生成 jwt token 时直接包含有限的访问权限 。
当然也可以使用中间件读取对应的角色,在授权检查前添加,可以自己实现也可以使用该库提供的下一节介绍的功能有限的访问权限 。
varclaims =newList<Claim>
newClaim(ClaimTypes.NameIdentifier,"uid"),
newClaim(ClaimTypes.Name,"用户名"),
newClaim(ClaimTypes.Email,"test@exp.com"),
newClaim(ClaimTypes.Role,"user"),
newClaim(ResourceClaimTypes.Permission,"查询"),
vartoken =newJwtSecurityToken(
"Issuer",
"Audience",
claims,
expires:DateTime.UtcNow.AddSeconds(3600),
signingCredentials:credentials
注意:如果角色名为 SangRBAC_Administrator ,将不进行授权检查有限的访问权限 。
可选中间件
使用提供的添加角色权限中间件,你也可以单独使用该组件有限的访问权限 。
Step 1
实现 IRolePermission 有限的访问权限 ,通过角色名获取该角色权限列表
publicclassMyRolePermission:IRolePermission
publicTask<List<Claim>>GetRolePermissionClaimsByName(stringroleName)
List<Claim>list =new;
// you code
returnTask.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 =>{
// 设置系统内置超级管理员的rolename
opt.userAdministratorRoleName ="supadmin";
option.Always=true;
Demo
•简单示例
References
[1] Sang.AspNetCore.RoleBasedAuthorization:
爱资源吧版权声明:以上文中内容来自网络,如有侵权请联系删除,谢谢。