角色身份验证使用授权属性,但不通过web.config中的授权

时间:2011-03-29 23:07:07

标签: asp.net asp.net-mvc-3 asp.net-membership

我正在使用ASP.NET MVC 3并尝试做一些非常直接的事情......

我的应用程序使用表单身份验证,这对控制器/操作非常有效。例如,如果我使用以下属性装饰控制器或操作,则只有管理员组的成员才能查看它们:

[Authorize(Roles="Administrators")]

但是我在默认的Scripts文件夹下有一个名为Admin的文件夹。我只希望Administrators组的成员能够访问此目录中的脚本,因此我在目录中创建了一个新的web.config,其中包含以下内容:

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

但是,无论用户是否是Administrators组的成员,他们都会收到302 Found消息,然后重定向到登录页面。

如果我将web.config更改为allow user="*",那么它可以正常工作。如果我为我正在测试的特定用户添加allow users="Username",它也可以使用。

关于我出错的地方或我可以开始调查的地方的任何想法?

1 个答案:

答案 0 :(得分:0)

您是否在默认Scripts文件夹中的 web.config 中添加了 RoleManager 如下所示

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>