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的映射表及其角色存储在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

六 Hibernate表关系及其配置

Hibernate:防止角色表中有多个相同的条目

获取所有用户及其角色进入表 asp.net mvc

经典角色权限系统设计五张表及拓展应用

Drupal Organic Group 角色数据存储在哪里?我如何访问它?

权限系统设计五张表