AuthorizeRole = "Admin" не работает в приложении mvc3? - PullRequest
1 голос
/ 11 октября 2011
  • У меня есть настройка провайдера членства в приложении mvc3.
  • Я перенес его из локального sql express app_data / aspnetdb.mdf на экземпляр локального сервера 2008 (в настоящее время это нормально работает для входов в систему / etc и [Authorize] SomeMethod ()
  • Iнедавно добавлено 1 новое aspnet_roles ("Admin") и 1 новая запись в ассоциации aspnet_UsersInRoles с моим именем пользователя.

Таблица ролей:

ApplicationId RoleId RoleName LoweredRoleName Описание3F96CA96-CCB3-4780-8038-AF3CCE0BD4F2 9B5B798D-E56E-4144-A12C-7C8945FCB413 Администратор Администратор-администратор

UsersInRol:

User-ID RoleId 589 E6096066096096060960960606609E0000-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: Есть ли еще одна строка подключения поставщика ролей, которую мне нужно настроить в веб-конфигурации, чтобы заставить это работать?

Ответы [ 3 ]

2 голосов
/ 11 октября 2011

Не могли бы вы опубликовать части вашего 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

0 голосов
/ 11 октября 2011

Попробуйте следующий код, чтобы точно указать свою проблему:

public ActionResult SomeMethod() {

    if (!User.IsInRole("Admin")) 
        throw new SecurityException("User is not an admin.");

}

Если вы получили исключение, это означает, что возникла проблема с вашим провайдером членства, или вы не в роли adminили ваш applicationid был настроен иначе, как предложено ниже.

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

0 голосов
/ 11 октября 2011

Убедитесь, что ваш ApplicationId совпадает с тем, что вы, вероятно, используете другой ApplicationId, проверьте здесь для получения дополнительной информации

...