вопрос поставщика членства/ролей asp.net

Мое приложение нуждается в возможности защиты на разных уровнях для разных команд. Например, кто-то может быть администратором для одной команды, но может быть только наблюдателем для другой.

В идеале я хотел бы иметь один небольшой набор ролей, но я хотел бы назначать людей на отдельные роли в каждой команде. т. е. «Джо» может быть администратором для TeamA, но иметь доступ для чтения для TeamB.

Поддержит ли это инфраструктура провайдера Asp.Net?

-- Мэтт

Обновление: моя проблема связана с методом «IsInRole». Он принимает один параметр. Помимо взлома (объединения двух элементов, таких как идентификатор команды и имя роли), есть ли какой-либо другой способ осуществить это?


person Matthew Timbs    schedule 08.09.2009    source источник


Ответы (2)


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

ИЗМЕНИТЬ:

В ответ на ваше редактирование вы можете иметь следующую структуру в своей базе данных

Group Table           Access Table           Role Table
id | name             id | name              group_id | access_id | name
-----------           ------------           ---------------------------
1    Team A           1    Guest              1          1         Team A Guest
2    Team B           2    User               1          2         Team A User
                      3    Admin              1          3         Team A Admin

иметь механизм обновления поля name в таблице Role при вставке новой строки.

Реализация пользовательского поставщика ролей очень проста. Вам просто нужно наследоваться от RoleProvider и переопределить нужные вам методы, написав логику того, откуда RoleProvider должен брать данные.

person Russ Cam    schedule 08.09.2009
comment
Спасибо, Расс, эта структура БД похожа на ту, которую я думал использовать. Одна проблема, с которой я сталкиваюсь, заключается в том, что вызывающий абонент передает IsInRole. Единственный параметр (имя роли) может не работать для меня. (На самом деле я упростил свой вопрос, у команд также есть иерархическая структура). В любом случае, спасибо за вклад. Я думаю, что это (или что-то подобное) будет моим путем. --- Мэтт - person Matthew Timbs; 09.09.2009
comment
@Matt - имя, которое будет передано, будет именем в таблице ролей, то есть if (User.IsInRole (Team A Guest)). - person Russ Cam; 09.09.2009
comment
еще раз спасибо Расс. Это была и моя мысль (объединение имени). Я думаю, что могу заставить это работать, но это кажется хакерским. - person Matthew Timbs; 09.09.2009

Не прямо из коробки. Вам нужно будет создать собственный провайдер для поддержки этой функциональности.

вот пример создания пользовательского поставщика членства http://www.asp.net/learn/videos/video-189.aspx

person clyc    schedule 08.09.2009
comment
См. комментарий, который я добавил к основному вопросу выше, относительно метода IsInRole. - person Matthew Timbs; 09.09.2009
comment
Microsoft разработала его так, чтобы вы также могли создать своего собственного поставщика ролей. Создайте свой собственный класс, сначала унаследовав от RoleProvider, а затем предоставив методы, которые будут принимать идентификатор команды, а затем имя роли. - person clyc; 09.09.2009
comment
вам в основном придется написать sql, который сделает проверку - person clyc; 09.09.2009