Маршрутизация бизнес-филиалов: детальный контроль доступа в ASP.NET MVC - PullRequest
0 голосов
/ 29 апреля 2010

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

1 Ответ

0 голосов
/ 03 января 2011

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

Я свернул свой собственный атрибут [BranchAuthorize(Roles = "Editor, Stock Keeper")], который проверяет роли аутентифицированного пользователя по требуемым ролям действия контроллера и отображает сообщение с подробным описанием необходимых ролей, если ни одна из них не назначена.

Унифицированное управление доступом к филиалам потребует отдельной службы авторизации, но позволит централизованно администрировать права.

...