Как следует структурировать маршруты ASP.NET MVC, чтобы обеспечить детальный контроль доступа на основе ролей к филиалам бизнеса?
Каждый бизнес-объект связан с филиалом либо сам по себе, либо через свои родительские объекты. Есть ли элегантный способ авторизации действий на основе пользовательских ролей для любого количества веток?
1. {ветка} в пути?
{branch}/{controller}/{action}/{id}
Действие:
[Authorize(Roles="Technician")]
public ActionResult BusinessWidgetAction(BusinessObject obj)
{
// Authorize will test if User has Technician role in branch context
// ...
}
2. Получить филиал от хозяйствующего субъекта?
{controller}/{action}/{id}
Действие:
public ActionResult BusinessWidgetAction(BusinessObject obj)
{
if (!User.HasAccessTo("WidgetAction", obj.Branch))
throw new HttpException(403, "No soup for you!"); // or redirect
// ...
}
custom membership provider
, что поможет. Вы хотитеauthorize actions based on user-roles
достаточно просто для поставщика членства по умолчанию, однако дополнительное ограничениеfor any number of branches
- так это на самом деле отношение Роль- ›Ветви (например, Пользователь находится в роли администратора для некоторых ветвей) или Пользователь-› Ветви (не могу вспомнить пример ) отношение. Возможно, я что-то упускаю !! - person Ahmad   schedule 29.04.2010Branches
(например, Кейптаун),Roles
(например, Admin, Techie) иUsers
(Джон, Джилл, Питер). сUserRoles
таблицей, которая отслеживает пользователя, ветку и роль, например. (Питер, Кейптаун, Techie). Мне нравится здесь ответ Рунеборга: stackoverflow.com/questions/1335315/ - person Petrus Theron   schedule 29.04.2010