Id的映射表及其角色存储在哪里?

问题描述 投票:0回答:1

我正在使用asp.net核心授权。我有一些角色,例如超级管理员,管理员,用户。每个用户将被分配其中一个。 SuperAdmin可以更改任何用户的角色。所以基本上我想要动态角色系统。那么在哪里映射用户角色数据和

[Authorize(Roles =“ Admin”)]

去哪里查看用户角色?表示此事物将在其中检查角色。

我正在使用Windows身份验证

c# asp.net-core entity-framework-core authorization windows-authentication
1个回答
0
投票

您可以通过策略使用基于声明的授权。在您的应用程序中设置Windows身份验证后,您可以将自定义声明添加到ClaimsPrincipal,检查用户的身份并确认当前用户具有哪个权限/角色:

  1. 您可以向您的应用程序添加声明转换服务:

    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);
        }
    }
    
  2. 添加到Startup.cs:

        services.AddAuthentication(IISDefaults.AuthenticationScheme);
        services.AddTransient<IClaimsTransformation, ClaimsTransformer>();
    
  3. 设置您的政策:

        services.AddAuthorization(options =>
        {
            options.AddPolicy("Admin", policy =>
                              policy.RequireClaim("role", "Admin"));
    
            options.AddPolicy("User", policy =>
                            policy.RequireClaim("role", "user"));
        });
    
  4. 通过要求此策略来限制对控制器或操作的访问:

        [Authorize(Policy = "Admin")]
        public IActionResult Contact()
        {
           .....
        }
    

您还可以将AD组用作角色。根据您的要求,您可以修改以上代码以适合您的情况。

© www.soinside.com 2019 - 2024. All rights reserved.