Доменная логика c разделение с IdentityServer - PullRequest
0 голосов
/ 27 марта 2020

У нас есть MVC приложение с членством в роли и IdentityServer для единого входа, оба являются отдельными приложениями. У нас есть две роли в нашем приложении - Admin и RegularUser. Каждый из них имеет определенный c набор свойств, например:

public class Admin
{
    public string Area { get; set; }

    public int Code { get; set;}
}

public class RegularUser
{
    public string SkypeId { get; set; }

    public string HomeAddress { get; set; }
}

В соответствии с шаблоном IdentityServer мы должны использовать один класс ApplicationUser для хранения всех данных профиля. Какова лучшая практика организации c хранилища данных с указанием ролей в разных приложениях? Моя мысль состоит в том, чтобы отделить хранилище профилей (ApplicationUser, в области IdentityServer) от сущностей домена (Admin и RegularUser, в области приложения MVC) и связать их вместе с ключом:

public class Admin
{
    public string ApplicationUserId { get; set; }

    public string Area { get; set; }

    public int Code { get; set;}
}

public class RegularUser
{
    public string ApplicationUserId { get; set; }

    public string SkypeId { get; set; }

    public string HomeAddress { get; set; }
}

Когда мы перенаправив из SSO после успешного входа в приложение MVC, мы можем получить Admin или RegularUser в контроллере следующим образом:

[Authorize]
public async Task<IActionResult> SomeAction()
{
    string userId = _userManager.GetUserId(User);

    if (User.IsInRole("Admin"))
    {
        Admin admin = await _adminRepository.GetByApplicationUserId(userId);
        /* logic for admin */
    }

    if (User.IsInRole("RegularUser"))
    {
        RegularUser regularUser = await _regularUserRepository.GetByApplicationUserId(userId);
        /* logic for regularUser */
    }

    ...
}

1 Ответ

0 голосов
/ 28 марта 2020

Вы также можете использовать IdentityServer для авторизации.

  1. Определить IdentityResource для каждого приложения и некоторые UserClaimTypes для него.

    new IdentityResource("app1_permissions", new string[] { "permission_in_app1" });

  2. Заполните license_in_app1 заявку с разрешениями пользователя в приложении 1.

    new Claim("permission_in_app1","[read1,write2]")

  3. У вашего клиента запрос app1_permissions scope из IdentityServer, когда вы перенаправляете пользователя.

    scope: app1_permissions openid profile

У каждого пользователя есть коллекция утверждений, в которых user1 имеет различную информацию, как user2.

Претензия - это заявление эмитента о предмете. Утверждения представляют собой атрибуты субъекта, которые полезны в контексте операций аутентификации и авторизации.

Используя идентификацию на основе утверждений, мы можем хранить различную информацию о каждом пользователе.

Класс заявки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...