Идея, которой вы должны следовать в случае пользовательских провайдеров членства / роли, аналогична той, которую AD модуль перечисляет в его инструкции по установке . Весь процесс можно разбить на несколько этапов:
- Добавление строки подключения в connectionstrings.config
- Добавление определений членства / поставщика ролей в раздел system.web файла web.config
- Активация переключателей
- Создание нового домена для пользователей / ролей из настраиваемого поставщика
- Добавление сопоставлений доменов / провайдеров
Добавление строки подключения
Это довольно просто, и кажется, это то, что вы уже сделали. Смысл в том, чтобы иметь строку подключения к базе данных, на которую вы затем можете ссылаться у пользовательских провайдеров.
Добавление определений участника / поставщика ролей
Еще один простой шаг - просто добавьте определение поставщика членства (myProvider
в вашем случае) в разделе system.web/membership/providers
в web.config и добавьте определение поставщика роли в разделе system.web/roleManager/providers
. Порядок не важен. На этом этапе вы не изменяете никакие другие определения поставщиков в упомянутых разделах.
Активация переключателей
Это где это становится сложным. Прежде всего, НЕ ИЗМЕНЯЙТЕ значение атрибута @defaultProvider
. По умолчанию это 'sitecore'
и должно оставаться как есть. Вместо этого найдите поставщика с именем "sitecore"
и измените его значение атрибута @realProviderName
с 'sql'
на 'switcher'
.
Поставщик с именем "switcher" отвечает за всю магию, стоящую за переключением поставщиков и объединением результатов методов GetAll / Find.
Создать новый домен
Вам следует создать новый домен для пользователей / ролей, которые вы будете брать из своей пользовательской БД через своих пользовательских провайдеров. Примерно так:
<domain name="myDomain" ensureAnonymousUser="false"/>
Если для атрибута @ensureAnonymousUser
установлено значение false, Sitecore не добавит анонимного пользователя в ваш домен, поэтому myDomain\Anonymous
не будет. Это обычно желаемое поведение для пользовательских доменов.
Добавление сопоставлений доменов / провайдеров
Это последний шаг, чтобы Sitecore знал, какой домен обслуживается у каждого провайдера. Один провайдер может обрабатывать несколько доменов (по умолчанию поставщик SQL Sitecore хранит пользователей из доменов 'sitecore' и 'extranet'), но не наоборот.
Итак, откройте основной файл web.config и перейдите в раздел configuration/sitecore/switchingProviders
. Добавьте что-то вроде этого в подраздел членства:
<provider providerName="myProvider" storeFullNames="false" wildcard="%"
domains="myDomain" />
и аналогичные вещи для подраздела roleManager:
<provider providerName="myProvider" storeFullNames="false" wildcard="%"
domains="myDomain" />
После этого пользователи из вашей БД будут отображаться как 'myDomain\user'
в UserManager, то же самое верно и для ролей. @storeFullNames='false'
означает, что ваша БД хранит пользователей / роли без доменных префиксов, только локальные имена. Подстановочный знак должен быть значением по умолчанию в случае, если ваш пользовательский источник - SQL (который, очевидно, является).
Вот и все, и теперь это должно работать! :-) Подробности описанных выше шагов описаны в этой статье .