где находится таблица соответствия идентификатора и ее роль? - PullRequest
0 голосов
/ 24 октября 2019

Я использую авторизацию ядра asp.net. У меня есть некоторые роли, такие как SuperAdmin, Admin, User. Каждому пользователю будет назначен один из них. SuperAdmin может изменить роль любого пользователя. Так что в основном я хочу динамическую систему ролей. Итак, где сопоставить данные пользовательской роли и

[Authorize (Roles = "Admin")]

, куда проверять роль пользователя? означает, что эта штука проверяет роль.

Я использую проверку подлинности Windows

1 Ответ

0 голосов
/ 25 октября 2019

Вы можете использовать авторизацию на основе утверждений через политики. После настройки проверки подлинности 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 в качестве ролей. Исходя из ваших требований, вы можете изменить вышеуказанные коды в соответствии с вашим сценарием. Для управления пользователями / ролями можно использовать локальную базу данных или таблицы автоматического создания ASP.NET Core Identity.

...