【发布时间】:2013-01-27 07:30:47
【问题描述】:
我有一个带有标准帐户控制器的常规 MVC 应用程序。我在 UserProfile 类中添加了几个字段,所以现在看起来像这样:
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string Address { get; set; }
public string Phone { get; set; }
public string FullName { get { return FirstName + " " + LastName; } }
public int GroupId { get; set; }
[ForeignKey("GroupId")]
public ICollection<Group> Groups { get; set; }
}
所以,基本上说用户可以分配到多个组。 (同样在 Group 类中,我说 Group 可以包含多个用户,显然)。
现在,每个用户都必须具有特定的角色。 (管理员、教师、学生等)
我按照这样的在线教程添加了角色支持:
<roleManager enabled="true" defaultProvider="SimpleRoleProvider">
<providers>
<clear/>
<add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/>
</providers>
</roleManager>
<membership defaultProvider="SimpleMembershipProvider">
<providers>
<clear/>
<add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" />
</providers>
</membership>
现在我想按 RoleName 过滤所有用户。但我没有办法做到这一点。
IE。像这样的东西。 Users.Where(x=>x.RoleName=="Admin").Select(x=>x.FullName)
(Users 是 ICollection<Users> 类型的 Group 类的属性)。我如何在没有角色类的情况下获得角色?
【问题讨论】:
-
啊,我明白了,您可以将表 pages_Roles 映射到您的 EF 模型中,方法是在您的上下文中使用 RoleName 列将其添加为 DBSet,然后在 roleMembership 表和用户表之间连接用户名让所有人都担任特定角色。
-
@LukeMcGregor,实际上是通过 pages_UserRoles 建立的多对多关系。我以为有更好的方法。您有如何实现这一目标的示例吗?
-
我通常根本不使用角色提供者并创建自己的数据库表
标签: c# asp.net-mvc entity-framework asp.net-mvc-4 entity-framework-5