#asp.net-mvc #asp.net-mvc-3 #asp.net-membership
#asp.net-mvc #asp.net-mvc-3 #asp.net-членство
Вопрос:
- У меня есть настройка поставщика членства в приложении mvc3.
- Я перенес его из локального приложения sql express app_data / aspnetdb.mdf на локальный экземпляр server 2008 (в настоящее время он работает нормально для logins / etc и [Authorize] someMethod()
- Недавно я добавил 1 новую aspnet_roles («Admin») и 1 новую запись в aspnet_UsersInRoles assoc. с моим именем пользователя.
Таблица ролей:
applicationId RoleId RoleName LoweredRoleName Описание 3F96CA96-CCB3-4780-8038- AF3CCE0BD4F2 9B5B798D-E56E-4144-A12C-7C8945FCB413 Администратор Администратор Администратор
Роли пользователей:
Идентификатор пользователя RoleId 58974159-E60E-4185-AD00-F8024C7C5974 9B5B798D-E56E-4144-A12C-7C8945FCB413
Q1: Почему следующий код не позволяет мне выполнить это действие контроллера?
[Authorize]
[Authorize(Roles = "Admin")] // !!! This is keeping me out...commented out I can get in but I'm set as "Admin" and have tried lower case "admin" as well.
public ActionResult SomeMethod()
{}
Q1a: Есть ли другая строка подключения поставщика ролей, которую я должен настроить в веб-конфигурации, чтобы заставить это работать?
Комментарии:
1. указали ли вы правильные параметры подключения
<membership><providers>...</providers></membership>
в своем web.config2. Привет всем! Моя строка членства для RoleManager была перепутана. Для него было установлено значение false.
Ответ №1:
Не могли бы вы опубликовать части вашего web.config, касающиеся поставщиков членства и ролей. Похоже, что имя вашего приложения задано неправильно.
<roleManager enabled="true">
<providers>
<clear/>
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="Your Application Name here" />
</providers>
</roleManager>
Редактировать
Имя вашего приложения не задано. Для него нужно что-то установить, и оно должно соответствовать имени приложения в вашей таблице базы данных: aspnet_Applications
Если в вашей веб-конфигурации есть ApplicationName=»TestApp» />, то в вашей таблице базы данных также должно быть TestApp в таблице aspnet_Applications
Комментарии:
1. Я только что проверил раздел RoleManager. было установлено значение false … имя приложения, в то время как по умолчанию установлено значение /, похоже, определено нормально как в webconfig, так и в базе данных.
2. Раздел конфигурации RoleManager настроен неправильно. Спасибо!
Ответ №2:
Убедитесь, что ваш applicationId совпадает, возможно, вы используете другой applicationId, проверьте здесь для получения дополнительной информации
Ответ №3:
Попробуйте приведенный ниже код, чтобы указать на вашу проблему :
public ActionResult SomeMethod() {
if (!User.IsInRole("Admin"))
throw new SecurityException("User is not an admin.");
}
Если вы получаете исключение, это означает, что возникла проблема с вашим поставщиком членства, или вы не в admin
роли, или ваш applicationid был настроен иначе, как предложено ниже.
Вот некоторые из возможностей.