Функция Role Manager не была включена - PullRequest
189 голосов
/ 06 октября 2010

Получил следующее ProviderException :

Функция Role Manager не была включена.

Пока все хорошо.

Есть ли где-нибудь метод, который можно вызвать, чтобы проверить, включен ли Role Manager или нет?

Ответы [ 7 ]

295 голосов
/ 25 июля 2011

Вы можете сделать это, прочитав логическое свойство по адресу:

System.Web.Security.Roles.Enabled

Это прямое чтение из атрибута enabled элемента roleManager в web.config:

<configuration>
  <system.web>
    <roleManager enabled="true" />
  </system.web>
</configuration>


Обновление:
Для получения дополнительной информации, проверьте этот образец MSDN: https://msdn.microsoft.com/en-us/library/aa354509(v=vs.110).aspx

51 голосов
/ 23 апреля 2014

Если вы попали сюда, потому что используете новую ASP.NET Identity UserManager, то, что вы на самом деле ищете, это RoleManager:

var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));

roleManager даст вам доступ, чтобы увидеть, существует ли роль, создать и т. Д., Плюс она создана для UserManager

11 голосов
/ 12 октября 2010

В другом месте через Google я нашел 2 предложения, которые предложили: а) убедиться, что ваша строка подключения к БД (та, которую использует Роли) правильная и что ключ к ней написан правильно, и б) что установлен флаг Enabled на RoleManager к истине. Надеюсь, что один из тех помогает. Это для меня.

Вы пробовали проверить Roles.Enabled? Кроме того, вы можете проверить Roles.Provider, чтобы увидеть, сколько поставщиков доступно, и вы можете проверить Roles.Provider для поставщика по умолчанию. Если он нулевой, то его нет.

8 голосов
/ 19 апреля 2016

Я нашел этот вопрос из-за исключения, упомянутого в нем.В моем Web.Config не было тега <roleManager>.Я понял, что даже если я добавлю его (как предложило Infotekka ), это приведет к исключению из базы данных.После выполнения предложений, приведенных в других ответах, приведенных здесь, ни один из них полностью не решил проблему.

Поскольку эти теги Web.Config можно автоматически генерировать, было бы неправильно решить их, добавив их вручную.Если вы находитесь в аналогичном случае, отмените все изменения, внесенные в Web.Config и в Visual Studio:

  1. Нажмите Ctrl + Q , введите nuget и нажмите «Управление пакетами NuGet»;
  2. Нажмите Ctrl + E , введите Поставщики и вв списке должны отображаться «Универсальные поставщики Microsoft ASP.NET Core Libraries » и «Универсальные поставщики Microsoft ASP.NET для LocalDB » (оба созданы Microsoft);
  3. Нажмите на кнопку «Установить» в обоих из них и закройте окно NuGet;
  4. Проверьте ваш Web.config, и теперь у вас должен быть хотя бы один тег <providers> внутри Профиль , Членство , SessionState , а также внутри нового тега RoleManager , например:

    <roleManager defaultProvider="DefaultRoleProvider">
        <providers>
           <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=NUMBER" connectionStringName="DefaultConnection" applicationName="/" />
        </providers>
    </roleManager>
    
  5. Добавитьenabled="true" примерно так:

    <roleManager defaultProvider="DefaultRoleProvider" enabled="true">
    
  6. Нажмите F6 , чтобы создать, и теперь все должно быть в порядке, чтобы перейти к обновлению базы данных без этого исключения.Нация:

    1. Нажмите Ctrl + Q , введите manager , нажмите «Консоль диспетчера пакетов»;
    2. Введите update-database -verbose, и метод Seed будет работать нормально (если вы еще нигде не работали) и создаст несколько таблиц в вашей базе данных;
    3. Нажмите Ctrl + W + L , чтобы открыть Обозреватель серверов, и вы сможете включить Соединения данных> DefaultConnection> Таблицы Роли и UsersInRoles таблиц среди вновь созданных таблиц!
5 голосов
/ 05 июля 2017

Если вы используете ASP.NET Identity UserManager, вы также можете получить его так:

var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>();

var roles = userManager.GetRoles(User.Identity.GetUserId());

Если вы изменили ключ для пользователя с Guid на Int, используйте, например, этот код:

var roles = userManager.GetRoles(User.Identity.GetUserId<int>());
0 голосов
/ 21 декабря 2018

Вот код, который вам нужно вставить в свой Account Controller в MVC5 и более поздних версиях, чтобы получить список ролей пользователя:

csharp public async Task<ActionResult> RoleAdd(string UserID) { return View(await UserManager.GetRolesAsync(UserID)).OrderBy(s => s).ToList()); }

Нет необходимостииспользуйте Roles.GetRolesForUser() и включите функцию Role Manager.

0 голосов
/ 18 сентября 2017
<roleManager
  enabled="true"
  cacheRolesInCookie="false"
  cookieName=".ASPXROLES"
  cookieTimeout="30"
  cookiePath="/"
  cookieRequireSSL="false"
  cookieSlidingExpiration="true"
  cookieProtection="All"
  defaultProvider="AspNetSqlRoleProvider"
  createPersistentCookie="false"
  maxCachedResults="25">
  <providers>
    <clear />
    <add
       connectionStringName="MembershipConnection"
       applicationName="Mvc3"
       name="AspNetSqlRoleProvider"
       type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    <add
       applicationName="Mvc3"
       name="AspNetWindowsTokenRoleProvider"
       type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </providers>
</roleManager>
...