我目前正试图让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>
请问有谁能告诉我哪里出错了。感谢您的所有帮助和支持
答案 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
方法。