Поскольку интерфейс RoleProvider, кажется, обрабатывает роли как не что иное, как простые строки, мне интересно, есть ли какой-нибудь нехакерный способ применить необязательное значение для роли для каждого пользователя.
Наша нынешняя система управления входом в систему реализует роли в виде пар ключ-значение, где часть значения является необязательной и обычно используется для уточнения или ограничения разрешений, предоставляемых ролью.
Например, роль «редактор» может содержать пользователя «Барри», но для «Барри» она будет иметь необязательное значение «raptors», которое система будет интерпретировать как означающее, что Барри может редактировать только статьи, поданные под категория "хищники".
В других местах я видел предложение просто создать дополнительные роли с разделителями, такие как «editor.raptors» или что-то подобное. Это на самом деле не будет идеальным, потому что это значительно увеличит количество ролей, и я могу сказать, что замена нашей текущей реализации будет очень трудно продать (что также очень далеко от идеала, но имеет преимущество в том, что пользовательский сделано для работы с нашей базой данных пользователей).
Я уже могу сказать, что упомянутый выше метод конкатенации будет включать в себя много утомительного разделения строк и частичного сопоставления.
Есть ли лучший способ?
РЕДАКТИРОВАТЬ: Моя первоначальная цель состояла в том, чтобы использовать более встроенные функции ASP.NET. Например, контролировать доступ через элементы <authorization/>
в Web.config. Для этого, насколько я могу судить, требуются сами роли. Концепция аутентификации нашей нынешней системы, казалось, очень хорошо соответствовала этому ограничению.
Ответы на вопросы mnemosyn
- Да. У нас есть центральная база данных для пользователей, приложений и их авторизаций. Это базовая система, и обойти ее невозможно.
- В настоящее время наша система не является иерархической, и для ее обслуживания требуется довольно много усилий. Когда приложение создается, определяется набор полномочий (например, «admin», «user», «poweruser», «gatekeeper», «keymaster» и т. Д.). Затем пользователи связываются с этими авторизациями с необязательным значением для уникальной комбинации авторизации пользователя и (для конкретного приложения).
- Можете ли вы уточнить эти «категории», о которых вы говорите?