Функция диспетчера ролей не включена, файл configuration.cs находится в отдельном проекте.

У меня есть приложение MVC4 с моделями и миграциями в отдельном проекте, который представляет собой библиотеку классов.

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

foreach (var subcontractor in context.Subcontractors)
{
    WebSecurity.CreateUserAndAccount(subcontractor.Email, subcontractor.ObsoletePlainTextPassword);
}

Я скопировал следующий код из своего основного проекта в app.config, но не думаю, что он подхватывается.

<profile defaultProvider="DefaultProfileProvider">
  <providers>
    <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
  </providers>
</profile>
<membership defaultProvider="DefaultMembershipProvider">
  <providers>
    <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
  </providers>
</membership>
<roleManager defaultProvider="DefaultRoleProvider">
  <providers>
    <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
  </providers>
</roleManager>

Когда я запускаю базу данных обновления, я получаю ошибку The Role Manager feature has not been enabled.. Что мне не хватает?


person PBG    schedule 27.06.2013    source источник


Ответы (2)


Проблема заключалась в том, что мой проект «Данные» не был проектом StartUp. App.config не читался, и это вызывало ошибку.

person PBG    schedule 23.07.2013

MVC4 перестроил (или, можно сказать, позаимствовал) систему аутентификации из WebMatrix, поэтому убедитесь, что вы не смешиваете какой-либо код из предыдущей системы аутентификации. Но если вы используете безопасность и аутентификацию по умолчанию (теперь это SimpleMembership) и пытаетесь раздавать роли, вам нужно включить SimpleRoleProvider в файле web.config. Вы пытаетесь создать пользователя или пользователей с соответствующими ролями в методе заполнения для миграции сущностей? Если вы не заполняете базу данных ролями, это может быть что-то другое. Проверьте это, удалив все упоминания о заполнении ролей в файле migrations/configuration.cs. Поэтому убедитесь, что все упоминания о SimpleRoleProvider отсутствуют в файле configuration.cs, или попробуйте следующий код в файле web.config.

<roleManager enabled="true" defaultProvider="SimpleRoleProvider">
  <providers>
    <clear/>
    <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/>
  </providers>
</roleManager>
<membership defaultProvider="SimpleMembershipProvider">
  <providers>
    <clear/>
    <add name="SimpleMembershipProvider" 
         type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData"/>
  </providers>
</membership>

Причина этого в том, что хотя SimpleRoleProviders доступен как часть MVC при работе веб-сайта, этот поставщик ролей должен быть явно настроен как часть исходного метода для миграции. В противном случае начальный метод в миграциях не подберет его.

person firecape    schedule 23.07.2013
comment
Я не добавляю пользователей ни в какие роли, просто вызываю WebSecurity.CreateUserAndAccount. Я попытался добавить ваш код в свой app.config, но это тоже не сработало. Разве его не подхватывают, потому что мой начальный метод находится в библиотеке классов? - person PBG; 23.07.2013