SqlRoleProvider Пользовательский поставщик членства

#c# #.net #asp.net #security

#c# #.net #asp.net #Безопасность

Вопрос:

Возможно ли использовать встроенный SqlRoleProvider вместе с пользовательским поставщиком членства? Как это было бы достигнуто?

@mellamokb

Объединить определенные аспекты их обоих?НЕТ

Использовать их параллельно в одно и то же время?ДА (отсюда часть моего вопроса «используйте встроенный SqlRoleProvider вместе с пользовательским поставщиком членства»)

Считывать роли из обоих?Какое отношение поставщик членства имеет к ролям чтения?

Аутентифицироваться на обоих из них одновременно?Какое отношение поставщик ролей имеет к аутентификации?

Комментарии:

1. Значение? Объединить определенные аспекты их обоих? Использовать их параллельно в одно и то же время? Читать роли из обоих? Аутентифицироваться на обоих из них одновременно? Вам нужно четко описать, что вы намереваетесь и как вы ожидаете, что это будет работать.

Ответ №1:

Какое отношение поставщик членства имеет к ролям чтения?

Ничего.

Какое отношение поставщик ролей имеет к аутентификации?

Ничего

Да, вы, безусловно, можете использовать SqlRoleProvider параллельно с вашим пользовательским поставщиком членства. Они оба независимы.

Встроенный поставщик SqlMembership и SqlRoleProvider совместно используют таблицы aspnet_Users и aspnet_Application. С помощью SqlRoleProvider всякий раз, когда вы добавляете пользователя в роль, он проверяет таблицу aspnet_Users на наличие пользователя (он проверяет комбинацию username applicaitonID). Если пользователь не существует, он создаст его для вас. Если пользователь существует (это может быть случай, когда пользователь был создан с помощью SqlMembershipProvider), он просто добавит пользователя к роли, а не создаст пользователя.

Итак, опять же, да, это должно сработать.

Комментарии:

1. Спасибо. Кстати, мои вопросы были риторическими.

Ответ №2:

Я никогда не пробовал это, но, основываясь на моем опыте работы с SqlMembershipProvider и SqlRoleProvider, я бы сказал, что это возможно. Однако я полагаю, что SqlRoleProvider потребует, чтобы вы сохранили (или, по крайней мере, отразили) свою базу данных членства в настройке схемы с помощью Aspnet_regsql.exe инструмент, поскольку ему понадобятся эти таблицы для таких методов, как RoleProvider.FindUsersInRole которые возвращают список пользователей.

Для получения информации о реализации пользовательского поставщика членства смотрите эту статью:

MSDN: реализация поставщика членства

Редактировать: Чем больше я смотрю на это, тем больше мне кажется, что единственный уровень взаимодействия между SqlMembershipProvider и SqlRoleProvider находится на уровне базы данных SQL, поэтому, опять же, пока вы реализуете свой пользовательский MembershipProvider для хранения (или зеркального отображения) ваших пользовательских данных в SQL так же, как это делает SqlMembershipProvider, вы должны быть на высоте.

Комментарии:

1. Для пояснения: Нет, поставщику пользовательского членства в любом случае не нужно зеркально отображать SqlMembershipProvider.

2. @gbs Спасибо за информацию в вашем ответе, я не знал, что поставщик ролей автоматически настроит для вас пользователей по мере добавления пользователей. Думаю, мне следовало присмотреться к хранимым процедурам RoleProvider немного внимательнее.