Как я могу реализовать иерархию ролей в приложении asp.net mvc, используя activedirectorymembershipprovider - PullRequest
5 голосов
/ 16 апреля 2009

В моем приложении asp.net mvc я использую activedirectorymembershipprovider. В активном каталоге я создал пару ролей (групп), аналогичных, для простоты этого примера, «обычному» и «администратору».

В настоящее время я запрашиваю, играет ли пользователь роль, получая IPr принцип httpcontext и вызывая User.IsInRole (nameOfRoleGoesHere);.

Требуемое им поведение позволяет мне спросить, находится ли пользователь в роли «администратор», и затем неявно спрашивать, есть ли пользователь во всех ролях ниже этой (в этом случае роль «нормальная» будет ниже «администратор» «). Поскольку мои роли в основном вертикальные (если это имеет смысл), этот тип наследования ролей, кажется, имеет смысл для моего приложения на данный момент.

Как я могу получить такое поведение - должен ли я реализовать некоторую пользовательскую логику, позволяющую мне запрашивать роль «администратор», но абстрагируясь от действительности, запрашивая как «обычного», так и «администратора» в активном каталоге за сценой - или Можно ли структурировать группы в активном каталоге, как-то автоматически давая мне такое поведение?

Извиняюсь за грубое недопонимание asp.net, Active Directory и безопасности .net с моей стороны - я новичок и экспериментирую.

Ответы [ 2 ]

3 голосов
/ 17 апреля 2009

AD поддерживает концепцию группы, являющейся членом другой группы?

Таким образом, вы можете иметь следующее:

Пользователи: Энн, Боб, Чарли, Дуглас, Эллиот, Фред и Джордж.

Роли: Нормальный, Редактор, Администратор

Затем определите каждую группу как:

Администратор имеет следующих членов: Джордж

Редактор имеет следующих членов: "Администратор", Дуглас, Эллиот

Обычный имеет следующих членов: «Редактор», «Администратор», Энн, Боб, Чарли

Таким образом, вы знаете, что Джордж является членом группы «Обычный», «Редактор» и «Администратор», поскольку все члены группы «Администратор» включены в эти группы, в то время как Дуглас - только член группы «Редактор» и «Обычный», а Анна - просто обычный пользователь, и AD сказал бы: « да, Джордж - обычный пользователь », если вы спросите его.

ОДНАКО: Не существует (насколько мне известно) официальной MS поддерживаемой ActiveDirectory RoleProvider , которая бы заполняла RolesPrinciple правильными ролями AD - есть пара там как этот на CodePlex что вы определили в качестве поставщика ролей?

Поставщик ролей ASP.NET по умолчанию не поддерживает иерархии ролей, поэтому вам может потребоваться либо:

  1. Поместите пользователя в каждую роль, к которой у него есть доступ, и проверяйте только интересующую вас роль.
  2. Предоставьте пользователю наиболее мощную роль, к которой он может получить доступ, а затем проверьте каждую роль, к которой он должен иметь доступ.
  3. Записать / найти поставщика ролей , который поддерживает иерархии - просто верните true, если пользователь находится в роли более высокого порядка.
1 голос
/ 16 апреля 2009

Active Directory действительно не имеет понятия иерархии с точки зрения членства. Пользователь является членом одной, нескольких, многих групп - но только это. Он член группы "Администратор" - да или нет. Он также может быть членом GRoup A, Gropu B, Group F и Group M - но реальной поисковой иерархии для вас не существует.

Я полагаю, что в некотором смысле возможность просто объединить любое количество групповых членов, вероятно, даже более гибко и надежно, чем иерархия, на мой взгляд.

Марк

...