Рекомендации по созданию настраиваемых типов заявок

Для определенного набора разрешений, например. EditPage, CreateProject, ModifyUser. В настоящее время я рассматриваю два разных способа создания некоторых типов пользовательских претензий для моделирования такого поведения. Я могу найти мало информации в Интернете о лучшем способе сделать это и надеяться на некоторые отзывы о том, как вы это сделали в своих собственных системах.

Первый подход, который я рассмотрел, заключается в использовании типа претензии "действие" с конкретным действием, указанным значением претензии:

var claims = new [] 
{
    new Claim("http://schemas.company.com/claims/project/action", "EditPage"),
    new Claim("http://schemas.company.com/claims/project/action", "CreateProject"),
    new Claim("http://schemas.company.com/claims/project/action", "ModifyUser")
}

Второй подход заключается в том, чтобы использовать сам тип заявки для определения выполняемого действия, значение не используется. Это похоже на стиль безопасности "PossessProperty", где до тех пор, пока у пользователя есть искомый тип, они могут выполнить действие.

var claims = new [] 
{
    new Claim("http://schemas.company.com/claims/project/editpage", ""),
    new Claim("http://schemas.company.com/claims/project/createproject", ""),
    new Claim("http://schemas.company.com/claims/project/modifyuser", "")
}

Также обратите внимание, что в вышеперечисленных типах претензий я включил дискриминатор "project", чтобы я мог различать пользователя, который может редактировать страницу в Project A, но не Project B.

Мы также планируем хранить все эти пользовательские заявки в центральной базе данных "Авторизация", поэтому требуется уникальность.

Мы будем благодарны за любые мысли или отзывы.

Ответ 1

Ну, вы не указали больше подробностей о своих намерениях, но если вы планируете сделать эти претензии частью личности пользователя - это явно анти-шаблон.

В заявлении описывается идентификатор пользователя (который может включать грубые данные авторизации, такие как роли). Чтобы сделать более тонкие решения авторизации, используйте что-то вроде ClaimsAuthorizationManager в .NET.

В этой точке расширяемости вы принимаете обоснованное решение на основе

a) личность пользователя б) ресурс, к которому пользователь пытается получить доступ; c) операция, которую пользователь пытается сделать на ресурсе

Итак, другими словами, претензии являются вкладом в ваши разрешения, а не прямым ответом.