Как следует структурировать маршруты 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
// ...
}
3. Или есть лучший способ?