Аутентификация ролей работает с использованием атрибута Authorization, но не с помощью авторизации в web.config - PullRequest
0 голосов
/ 30 марта 2011

Я использую ASP.NET MVC 3 и пытаюсь сделать что-то, что должно быть действительно простым ...

Мое приложение использует проверку подлинности с помощью форм, и это прекрасно работает для контроллеров / действий. Например, если я украшаю контроллер или действие с атрибутом, указанным ниже, только члены группы администраторов могут их просматривать:

[Authorize(Roles="Administrators")]

Однако у меня есть папка в папке Scripts по умолчанию, которая называется Admin. Я хочу, чтобы только члены группы «Администраторы» имели доступ к сценариям в этом каталоге, поэтому я создал новый файл web.config в каталоге со следующим содержимым:

<?xml version="1.0"?>
<configuration>
  <system.web>
    <authorization>
      <allow roles="Administrators"/>
      <deny users="*"/>
    </authorization>
  </system.web>
</configuration>

Однако, независимо от того, является ли пользователь членом группы «Администраторы» или нет, он получает сообщение 302 Found и затем перенаправляется на страницу входа в систему.

Если я изменю web.config на allow user="*", тогда он будет работать. Это также работает, если я добавлю allow users="Username" для конкретного пользователя, с которым я тестирую.

Любые идеи о том, где я иду не так или где я мог бы начать расследование?

1 Ответ

0 голосов
/ 30 марта 2011

У вас есть RoleManager , добавленный в web.config в папке сценариев по умолчанию что-то, как показано ниже

system.web>
    <authentication mode="Forms" >
      <forms loginUrl="login.aspx"
      name=".ASPXFORMSAUTH" />
    </authentication>

  <roleManager defaultProvider="SqlProvider" 
    enabled="true"
    cacheRolesInCookie="true"
    cookieName=".ASPROLES"
    cookieTimeout="30"
    cookiePath="/"
    cookieRequireSSL="false"
    cookieSlidingExpiration="true"
    cookieProtection="All" >
    <providers>
      <add
        name="SqlProvider"
        type="System.Web.Security.SqlRoleProvider"
        connectionStringName="SqlServices"
        applicationName="SampleApplication" />
      </providers>
    </roleManager>
  </system.web>
...