2015-03-12 2 views
1

У меня есть проект MVC 5 с проверкой подлинности Windows.MVC 5 пользовательская логическая авторизация с использованием проверки подлинности Windows

Я использую по умолчанию WindowsTokenRoleProvider как мой провайдер ролей, и она работает в следующей ситуации:

[CustomAuthorization(Roles = "DOMAIN\example_group")] 
public ActionResult Action()... 

Он отлично работает. Проблема начинается, когда я хочу использовать пользовательскую роль, например: «Утвердить». Чтобы проверить, кто является реальным утверждающим, я должен запросить специальную таблицу и использовать пользовательскую логику, чтобы решить, является ли текущий человек Подтверждением.

Для того, чтобы сделать это, я заменяю AuthorizeCore из CustomAuthorize, и написал что-то вроде этого:

protected override bool AuthorizeCore(HttpContextBase httpContext) 
{ 
    if(CheckIfCurrentUserIsAnApprover()){ 
     return true; 
    } 
    ........... 
} 

Но что произойдет, когда я добавлю еще одну роли, позволяет сказать Managers, я должен буду добавить:

if(CheckIfCurrentUserIsManager()){ 
     return true; 
} 

Как я могу сделать его более общим?

+0

Не могли бы вы просто использовать роль в качестве аргумента? So..CheckIfCurrentUserIsA ("утверждающий"); или CheckIfCurrentUserIsA («Менеджер»); и обрабатывать это в методе? – heymega

+0

Неудачно нет. Мне нужно проверить несколько условий, например: у этого пользователя есть записи X с определенным флагом и т. Д. –

ответ

0

Это явный разрез для управления доступом на основе атрибутов (ABAC).

ABAC расширяет контроль доступа на основе роли с атрибутами, чтобы вы могли принимать решения на основе таких вещей, как ограничение на одобрение пользователя.

В ДКС, вы получите, чтобы написать политику контроля доступа, такие как:

  • пользователь с ролью == утверждающий может сделать действие == вид на объект типа == сделки, если пользователь. место == object.location.

Язык, используемый для написания политик, - это XACML (язык разметки расширяемого доступа).

XACML также определяет архитектуру с понятием:

  • точки применения политики: перехватчик перед вашим приложением
  • политика точка решения: двигатель, который принимает решения

Вы можно прочитать здесь: http://developers.axiomatics.com/blog/index/entry/xacml-reference-architecture.html. Аксиоматика обеспечивает двигатель .net и .net pep.