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: Внедрение управления разрешениями на основе групп
Существует для этих требований уже рабочий пример, который вам не нужно изобретать заново.
Ответы
Ответ 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"); });
// });