Авторизация / Роли в MVC5
У меня проблемы с использованием авторизации / ролей в MVC5 (VS2013).
Аутентификация работает в значительной степени из коробки (то есть, просто используя Visual Studio для создания проекта MVC по умолчанию). Я меняю DefaultConnection
Строка подключения к действительной (но не существующей) базе данных. Затем я регистрирую нового пользователя, и база данных создается автоматически с таблицами, такими как AspNetUsers
а также AspNetRoles
,
Тем не менее, я не могу ничего делать с ролями. Первое, что нужно сделать, - добавить роль с кодом C#, например:
Roles.CreateRole("Admin");
Я получаю исключение с сообщением:
"Функция Role Manager не была включена".
Я включаю его в web.config с помощью:
<roleManager enabled="true"/>
А теперь получите исключение:
"Невозможно подключиться к базе данных SQL Server."
Раньше очень легко работать с System.Web.Security.SqlRoleProvider
, но не с новым провайдером, который поставляется по умолчанию с MVC5. Есть много очень сложных статей по этому вопросу, но мне кажется, что это что-то настолько важное и прямолинейное, что должен быть простой способ заставить его работать.
Большое спасибо за любую помощь.
2 ответа
Я решил это сейчас. Оказывается, класс Roles совершенно не имеет отношения к управлению ролями в MVC5, по крайней мере, с точки зрения готовой конфигурации.
Класс Roles и класс Membership по-прежнему существуют, а поставщик настроен на SqlMembershipProvider
,
Тем не менее, это не поставщик, используемый AccountController
, который вообще не использует класс Membership; оно использует Microsoft.AspNet.Identity.UserManager
,
Пока генерируется AccountController
предоставляет множество примеров использования UserManager
не имеет ничего общего с ролями.
Эквивалентный класс для ролей Microsoft.AspNet.Identity.RoleManager
, Есть полная документация для этого в MSDN
Я предлагаю обратиться к этой статье, поскольку она показывает, как вы можете создавать роли. После того как вы создали необходимые роли, вы можете использовать метод UserManager.AddToRole или UserManager.AddToRoleAsync, чтобы добавить пользователя к определенной роли.