Подтвердить что ты не робот

ASP.NET 5 MVC 6 Идентичность 3 Группы заявок на претензии

В настоящее время я ищу решение для использования расширенного управления разрешениями для групп/групп в ASP.NET 5 MVC 6 с Identity 3. Я начал новый веб-проект Preview Starter Web с интегрированной простой системой входа.

Теперь мне нужно комплексное "управление правами пользователей" со следующими функциями:

  • пользователи могут быть в нескольких группах/ролях
  • у группы/роли есть много объектов доступа (например, CanAccessUser, CanEditUser...)
  • эти объекты доступа (возможно, претензии?) каждой группы/ролей дополняют друг друга.
  • (необязательно для окончательного решения): дополнительно = > объекты доступа (возможно, претензии) могут быть назначены независимо группой для пользователя

Я видел, что идентичность уже широко предоставляет подходящую мне структуру таблицы. (например, AspNetUsers, AspNetUserRoles, AspNetRoles, AspNetRoleClaims),

Но у меня отсутствует хороший пример/документация для их использования.

Для MVC 5 я использовал этот пример: у пользователей много групп, у группы может быть много ролей (роли - это объекты доступа в исходном коде для классов/функций) ASP.NET Identity 2.0: Внедрение управления разрешениями на основе групп

Существует для этих требований уже рабочий пример, который вам не нужно изобретать заново.

4b9b3361

Ответ 1

Мы были на одной и той же лодке здесь, без особого чтения, кроме источника, конечно...

Мы закончили реализацию Политики. Политики представляют собой группу претензий, которые требуются для авторизации. эти Политики могут быть применены к Контроллерам.

Вы можете определить свои политики в Startup.cs, ConfigureServices:

services.AddAuthorization(options =>
{
    options.AddPolicy("SalesSenior", policy =>
    {
        policy.RequireClaim("department", "sales");
        policy.RequireClaim("status", "senior");
    });
});

Мы определили роли, присвоили им 1 или более претензий и назначили роли для пользователей, чтобы они могли быть проверены на соответствие соответствующей политике при попадании на контроллер.

Вы можете ввести IAuthorizationService в контроллер или атрибут так:

public class SalesDashboardController: Controller
{
    private readonly IAuthorizationService _authz;

    public VarianceOverviewController(IAuthorizationService authz)
    {
        _authz = authz;
    }
    ...
}

Затем вы можете использовать IAuthorizationService для проверки правильности заявлений пользователей...

if (await _authz.AuthorizeAsync(User, "SalesSenior"))
{
    // User is authorized            
}

Эта статья была моим основным источником этого материала и была для меня отличным учебником. Удачи!

Ответ 2

Если вы ищете образец проекта, на данный момент их не так много. Первое, что нужно посмотреть, это aspnet страницы проекта GitHub.

К счастью, подпроект ASP.NET Identity имеет примерный проект, который вы можете посмотреть здесь здесь, однако он может не охватывать все ваши требования. Обратите внимание, что используется последняя бета-версия.

Ответ 3

Этот поток помог мне получить что-то полезное, но грустно, что это не лучше документировано.

Вот мои попытки улучшить это. Asp.net.Identity(3.0.0.0-rc1-final)

в Startup.cs → ConfigurationServices

        //Define your policies here, they are strings associated with claims types, that have claim strings... 
        //they need to be in AspNetUserClaims table, user id, department, Dev to be allowed access to the Dev policy
        //add the auth option, below that makes it work, and in the api controller, add the        
        //[Authorize("Dev")] attribute
        //services.AddAuthorization(
        //    options =>
        //    {
        //        options.AddPolicy("Dev", policy => { policy.RequireClaim("department", "Dev"); });
        //    });