Ваша концепция авторизации на основе "ролей" кажется несколько ошибочной.Опять же, это не редкость, учитывая, что существуют различные определения, которые не совсем согласны с насилием, по крайней мере, в их более мелких деталях.Единственное, что у них общего, как правило, общее, так это то, что основным фактором, определяющим, проходит или нет попытка авторизации, являются свойства пользователя, а не свойства цели, в отношении которой планируется выполнить действие.Помимо этого, вы, вероятно, не должны слишком много думать о том, что на самом деле делает система авторизации, если она утверждает, что она «основана на ролях».
Например, в парадигме авторизации на основе ролей ASP.NET, которую выИспользуемые сейчас фактические «роли» соответствуют фиксированному (то есть известному во время компиляции) набору операций.Например, вместо гранулярных разрешений «AddProduct», «RemoveProduct» и «EditProduct», указанных в исходном сообщении, можно ожидать фиксированную роль «Product Manager».Если вы хотите авторизоваться на более детальном уровне, тогда этот «чистый» ролевый подход не очень подходит, и IPrincipal.IsInRole, вероятно, совсем не то, что вам следует использовать.
Звучиткак вы хотите авторизовать гранулированные «операции», с операциями, сгруппированными в «роли» через конфигурацию времени выполнения.Некоторый набор «административных» пользователей будет иметь разрешения для управления этой конфигурацией.Они могут создавать, изменять и удалять «роли» по своему усмотрению, причем каждая «роль» представляет собой набор «операций», которые распознаются вашим приложением (т. Е. «Роль» означает «операция», а «группа» - это »).пользователь ").Ваше приложение не должно быть осведомлено о ролях.Вместо этого он будет разрешать операции.Пользователям будут предоставлены разрешения на операции с помощью любого из следующих действий:
- Предоставление пользователю разрешения на операцию,
- Предоставление разрешения на операцию группе, к которой принадлежит пользователь,
- Предоставление разрешения роли пользователю или
- Предоставление разрешения роли группе, к которой принадлежит пользователь.
Администрирование полномочий значительно упрощается при использовании только подхода № 4, но фактический подход (ы), используемый для предоставления разрешений, не должен иметь абсолютно никакого влияния на код, который проверяет разрешения перед выполнением действий.
Подобные вещи не являются чем-то необычным, хотя его поддержка не имеетбыл встроен в .NET Framework.Существуют инструменты, которые могут помочь по крайней мере частично (например: AzMan ), но я не знаю ни о какой коммерческой среде на стороне .NET, которая предоставляет все необходимые компоненты, не требуяхотя бы немного нестандартного кодирования.(В этой области есть несколько небольших проектов с открытым исходным кодом, но вам необходимо оценить их плюсы и минусы в контексте ваших приложений.)