Как реализовать поставщика настраиваемых ролей, который поддерживает подроли?

Есть ли хорошие руководства по реализации настраиваемого поставщика ролей, поддерживающего родительские и дочерние роли?

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

Например:

[IT]

[ИТ] > [Администратор]

[Экстранет]

[Экстранет] > [Администратор]

В этом сценарии роль «Администратор» фактически представляет собой две отдельные роли: одну для ИТ-специалистов и одну для сценариев экстрасети. В идеале между двумя ролями «Администратор» нет никакой связи, поскольку они являются уникальными подролями.

[Изменить]: после комментария Игоря я чувствую, что должен уточнить. В aspnetdb уже размещено несколько приложений, поэтому использование имени приложения невозможно для разделения подролей, поскольку оно уже используется для разделения ролей по приложениям.


person Brian Scott    schedule 28.07.2010    source источник
comment
Оглядываясь назад, я думаю, что поставщик ролей .Net по своей сути построен на концепции одномерной роли с именем приложения, допускающим разделение в некоторой степени. В настоящее время я внедряю пользовательскую библиотеку расширений Linq для класса поставщика ролей, которая будет поддерживать поиск в пользовательской таблице субролей.   -  person Brian Scott    schedule 28.07.2010


Ответы (3)


1) Используйте агрегацию разрешений, зачем вам наследование? Просто назначьте пользователю роли ИТ и администратора, и их разрешения будут объединены.

2) Разделите Admin(1) и Admin(2) с помощью Имя приложения. Если я вас понял это будет 2 разных приложения (иначе переименуйте одного админа на другое имя)

Удача.

person garik    schedule 28.07.2010
comment
хороший момент, я должен был быть более ясным в своем вопросе. У меня есть несколько приложений, которые уже используют один и тот же aspnetdb и используют разные имена приложений. В этом сценарии использование имени приложения для разделения ролей администратора невозможно. - person Brian Scott; 28.07.2010

Не уверен, что вы все еще ищете жизнеспособное решение, но недавно я разработал приложение с аналогичными требованиями. Я использовал поставщика ролей для назначения основных ролей. В вашем случае IT или Extranet. Затем присвойте каждому пользователю статус (это администратор и администратор экстрасети). Завершите сеанс при входе в систему, чтобы сохранить их статус, и используйте операторы if, чтобы предоставить доступ к страницам подролей и представлениям.

person Tom Ross    schedule 08.07.2011
comment
Спасибо, что вернулись ко мне. Я задал вопрос довольно давно. Решение, которое мы придумали, состояло в том, чтобы создать поставщика ролей, унаследовавшего стандартного поставщика ролей sql. Затем мы добавили новые настраиваемые таблицы для представления вложенных ролей и добавили методы для включения этой функциональности. - person Brian Scott; 08.07.2011

(Вероятно, следует пометить это asp.net)

Мне неизвестны какие-либо нативные (MS) решения, поддерживающие решения «роль в роли». Если вам не нужно указывать роль внутри роли, вы всегда можете создать такие роли, как «IT», «IT_Admin», «Extranet» и «Extranet_Admin».

person Erik Philips    schedule 28.07.2010