UserRoles不在Asp.Net中工作

时间:2014-11-13 11:19:36

标签: c# asp.net asp.net-roles

我目前正试图让UserRoles在ASP.NET中工作。我正面临一些问题。出于某种原因,它似乎没有从数据库中获取角色。

我正在使用IdentityModels.cs

中的以下代码更改表名以满足我的要求
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<IdentityUserRole>().ToTable("MyRroles");
    }

首先,它无法找到架构,在进行了一些研究后,我跟着 this 文章,并且该特定错误消失了。但是在文章之后,它在我的数据库中添加了以下表格

aspnet_Applications
aspnet_Roles
aspnet_SchemaVersions
aspnet_Users
aspnet_UsersInRoles

我不需要。我正在做一个基本的if语句,以检查角色是否正常工作。它似乎没有发挥作用。

if(Roles.RoleExists("RoleName"))
        {
            Button1.Visible = false;
    }

在我的web.config文件中,我有以下代码

<roleManager defaultProvider="MyConn" enabled="true">
        <providers>
            <add
              name="MyConn"
              type="System.Web.Security.SqlRoleProvider"
              connectionStringName="MyConn"
              applicationName="MyApp"/>
        </providers>
    </roleManager>

请问有谁能告诉我哪里出错了。感谢您的所有帮助和支持

1 个答案:

答案 0 :(得分:1)

如果你想a basic if statement to check whether the roles are working of not,那么你需要将角色存储在某个地方,对吧?由于您要使用默认角色提供程序,因此需要这些SQL表。 System.Web.Security.SqlRoleProvider的默认提供商使用它们。因为Roles.RoleExists("RoleName")会搜索这些表格,以查看当前用户是否已分配给RoleName角色。

如果您想改变用户被分配到角色的方式,那么您需要实现自己的角色提供者。

以下是一个例子:

public class MyRoleProvider : RoleProvider
{
    public override void AddUsersToRoles(string[] usernames, string[] roleNames)
    {
        // your logic here
    }

    public override bool IsUserInRole(string username, string roleName)
    {
        // your logic here
    }

    public override string[] GetAllRoles()
    {
        // your logic here
    }

    public override bool RoleExists(string roleName)
    {
        // your logic here
    }

    // etc...
 }

查看本文以了解所有可用的方法:http://msdn.microsoft.com/en-us/library/8fw7xh74(v=vs.100).aspx

然后,为了设置您的应用程序以使用您的提供程序,只需更新您的web.config文件:

<roleManager defaultProvider="MyRoleProvider" enabled="true" cacheRolesInCookie="true" cookieName=".ASPROLES" cookieTimeout="3" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="All">
    <providers>
        <clear />
        <add name="MyRoleProvider" type="MyNamespace.MyRoleProvider" connectionStringName="DefaultConnection" applicationName="MyAppName" writeExceptionsToEventLog="false" />
    </providers>
</roleManager>

当然,您需要使用自己的命名空间,选项等更新代码......

之后,Roles.RoleExists("RoleName")处的代码将从您的自定义角色提供程序执行RoleExists方法。