AuthorizeRole =“Admin”无法在mvc3 app中运行?

时间:2011-10-11 06:04:05

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

  • 我在mvc3应用程序中设置了成员资格提供程序。
  • 我将它从本地sql express app_data / aspnetdb.mdf移植到本地服务器2008实例 (目前这适用于登录/等,[授权] SomeMethod()
  • 我最近在aspnet_UsersInRoles assoc中添加了1个新的aspnet_roles(“Admin”)和1个新条目。用我的用户名。

角色表:

  

ApplicationId RoleId RoleName LoweredRoleName描述   3F96CA96-CCB3-4780-8038-AF3CCE0BD4F2 9B5B798D-E56E-4144-A12C-7C8945FCB413管理员管理员

UsersInRoles:

  

UserId 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:是否还有另一个角色提供程序连接字符串,我必须在Web配置中设置才能使其正常工作?

3 个答案:

答案 0 :(得分:2)

您能否发布关于成员资格和角色提供商的部分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”/&gt;那么你的数据库表也需要在aspnet_Applications表中有TestApp

答案 1 :(得分:0)

确保您的ApplicationId与您可能正在使用不同的applicationId相同,请查看here以获取更多信息

答案 2 :(得分:0)

请尝试以下代码以确定您的问题:

public ActionResult SomeMethod() {

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

}

如果您收到异常,则表示您的会员提供商存在问题,或者您不在admin角色,或者您的应用程序ID配置不同,如下所示。

这些是一些可能性。