ASP.NET MVC позволяет пользователям назначать разрешения для функциональности (т.е. действия) во время разработки, например.
[Authorize(Roles = "Administrator,ContentEditor")]
public ActionResult Foo()
{
return View();
}
Чтобы проверить разрешение, можно использовать следующий оператор в представлении (Razor):
@if (User.IsInRole("ContentEditor"))
{
<div>This will be visible only to users in the ContentEditor role.</div>
}
Проблема с этим подходом заключается в том, что все разрешения должны быть установлены и назначены как атрибуты во время разработки. (Атрибуты скомпилированы в DLL, поэтому я в настоящее время не знаю о механизме применения атрибутов (для разрешения дополнительных разрешений), таких как [Authorize (Roles = "Administrator, ContentEditor" )] во время выполнения.
В нашем прецеденте клиент должен иметь возможность изменять, какие у пользователей есть разрешения после развертывания.
Например, клиент может пожелать разрешить пользователю в роли ContentEditor
редактировать содержимое определенного типа. Возможно, пользователю не разрешили изменять значения таблицы поиска, но теперь клиент хочет разрешить это, не предоставив пользователю все разрешения в следующей более высокой роли. Вместо этого клиент просто хочет изменить разрешения, доступные для текущей роли пользователя.
Какие существуют варианты стратегий, позволяющих определять разрешения для MVC-контроллеров/представлений/действий за пределами атрибутов (как в базе данных) и оцениваться и применяться во время выполнения?
Если возможно, мы очень хотели бы придерживаться максимально возможного уровня возможностей для ASP.NET-членства и роли поставщика, чтобы мы могли продолжать использовать другие преимущества, которые он предоставляет.
Заранее благодарю за любые идеи или идеи.