Отримав наступного постачальника :
Функція менеджера ролей не ввімкнена.
Все йде нормально.
Чи є десь метод, який можна викликати, щоб перевірити, увімкнено Менеджер ролей чи ні?
Отримав наступного постачальника :
Функція менеджера ролей не ввімкнена.
Все йде нормально.
Чи є десь метод, який можна викликати, щоб перевірити, увімкнено Менеджер ролей чи ні?
Відповіді:
Це можна зробити, прочитавши з булевого властивості за адресою:
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
roleManager
увімкнено. Але зараз я отримую винятокUnable to connect to SQL Server database
Якщо ви потрапили сюди, тому що використовуєте нове ASP.NET
Identity
UserManager
, ви насправді шукаєте RoleManager
:
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
roleManager
надасть вам доступ, щоб побачити, чи існує роль, створювати тощо, плюс вона створена для UserManager
У Google я знайшов 2 пропозиції, які запропонували а) переконатися, що ваш db-з'єднання (той, який використовуються Ролями) правильний, і що ключ до нього написано правильно, і b) що прапор Enabled у RoleManager встановлено на істинне. Сподіваюся, один із них допомагає. Це зробило для мене.
Ви спробували перевірити Roles.Enabled? Також ви можете перевірити Roles.Providers, щоб побачити, скільки постачальників доступно, і ви можете перевірити Roles.Provider для постачальника послуг за замовчуванням. Якщо він недійсний, то його немає.
Я знайшов це питання через виняток, згаданий у ньому. Мій Web.Config не мав жодного <roleManager>
тегу. Я зрозумів, що навіть якщо я додав його (як запропонував Infotekka ), це виявиться винятком з бази даних. Після дотримання пропозицій в інших відповідях, поданих тут, жодна проблема не вирішила повністю.
Оскільки ці теги Web.Config можна генерувати автоматично, вирішити це було неправильно, додавши їх вручну. Якщо у вас є подібний випадок, скасуйте всі зміни, внесені в Web.Config та у Visual Studio:
Перевірте свою Web.config, і тепер у вас повинен бути принаймні один <providers>
тег всередині тегів Profile , Membership , 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>
Додати enabled="true"
так:
<roleManager defaultProvider="DefaultRoleProvider" enabled="true">
Натисніть, F6щоб скласти, і тепер має бути добре, щоб перейти до оновлення бази даних, не маючи цього винятку:
update-database -verbose
і метод Seed буде добре працювати (якщо ви ще не заблукали в іншому місці) та створить кілька таблиць у вашій базі даних;Якщо ви користуєтесь, 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>());
<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>
Ось код, який потрібно ввести у свій контролер облікового запису в MVC5 і пізніше, щоб отримати список ролей користувача:
csharp
public async Task<ActionResult> RoleAdd(string UserID)
{
return View(await
UserManager.GetRolesAsync(UserID)).OrderBy(s => s).ToList());
}
Не потрібно використовувати Roles.GetRolesForUser()
та вмикати функцію менеджера ролей.
web.config
? Я спробував вкласти це,Application_Start
і він говоритьThis method can only be called during the application's pre-start initialization phase.