AuthorizeRole = «Admin» не работает в приложении mvc3?

#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.config

2. Привет всем! Моя строка членства для 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 был настроен иначе, как предложено ниже.

Вот некоторые из возможностей.