Id的映射表及其角色存储在哪里?
Posted
技术标签:
【中文标题】Id的映射表及其角色存储在哪里?【英文标题】:where is mapping table of Id and it's role stored? 【发布时间】:2020-02-20 08:59:04 【问题描述】:我正在使用 asp.net 核心授权。我有一些角色,例如 超级管理员,管理员,用户。每个用户将被分配其中一个。 SuperAdmin 可以更改任何用户的角色。所以基本上我想要动态角色系统。 那么在哪里映射用户角色数据和
[授权(角色=“管理员”)]
去哪里查看用户的角色? 表示这个东西检查角色的位置。
我正在使用 Windows 身份验证
【问题讨论】:
听起来您想使用基于声明的授权而不是 Windows 授权。 我无法找到角色用户的映射位置。我提到了 Windows 身份验证 bcs,我的数据库中没有维护用户名密码表。 @mr.coffee 这些都是基本的 ASP.Net 身份功能。大量文档,例如 docs.microsoft.com/en-us/aspnet/core/security/authorization/…. 【参考方案1】:您可以通过政策使用基于声明的授权。在您的应用程序中设置 windows 身份验证后,您可以向 ClaimsPrincipal 添加自定义声明,检查用户的身份并确认当前用户拥有的权限/角色:
您可以向您的应用程序添加声明转换服务:
class ClaimsTransformer : IClaimsTransformation
public Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
var id = ((ClaimsIdentity)principal.Identity);
var ci = new ClaimsIdentity(id.Claims, id.AuthenticationType, id.NameClaimType, id.RoleClaimType);
//read database or flies or query AD to confirm user role by use ci.Name(username)
if (....)
ci.AddClaim(new Claim("role", "Admin"));
else
ci.AddClaim(new Claim("role", "user"));
var cp = new ClaimsPrincipal(ci);
return Task.FromResult(cp);
添加到 Startup.cs :
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddTransient<IClaimsTransformation, ClaimsTransformer>();
制定您的政策:
services.AddAuthorization(options =>
options.AddPolicy("Admin", policy =>
policy.RequireClaim("role", "Admin"));
options.AddPolicy("User", policy =>
policy.RequireClaim("role", "user"));
);
通过要求此政策来限制对控制器或操作的访问:
[Authorize(Policy = "Admin")]
public IActionResult Contact()
.....
您还可以将 AD 组用作角色。根据您的要求,您可以修改上述代码以适合您的场景。管理用户/角色可以使用本地数据库或 ASP.NET Core Identity 自动创建表。
【讨论】:
但是在哪里可以看到哪个用户拥有哪个角色。这些数据存储在哪里? 角色声明被添加到 cookie 中,由您决定存储在某个地方,例如数据库。 正是我想要的。我想将角色存储在数据库中,以便我可以动态管理它。那么如何将它们存储在数据库中 您可以在IClaimsTransformation
服务中从 AD 中读取角色/组并保存到数据库,或者在任何特定操作中执行角色管理,这取决于您。不知道你的问题是什么。
在我的应用程序中,超级管理员将决定每个用户的角色。默认角色是“员工”。我想赋予超级管理员可以更改任何用户角色的能力。将来可以引入新角色。所以我想要映射 perticula 用户角色的数据库表。在该表上,我可以为任何用户的角色更改执行更新以上是关于Id的映射表及其角色存储在哪里?的主要内容,如果未能解决你的问题,请参考以下文章