MVC 4特定的角色列

本文关键字:角色 MVC | 更新日期: 2023-09-27 18:28:00

我正在寻找一种使用像WebSecurity这样的.NET类来实现登录系统的方法,因为使用它们看起来很困难。我需要不同角色的登录系统,我使用EF代码优先的方法MVC 4。

问题是我不知道我应该如何代表不同角色的用户。这里有一个例子:

成员是常规注册用户。他有用户名密码电子邮件地址以及姓名等等。他还可以订购东西。

管理员只是管理员,他与成员有一些共同点,如用户名密码,但他没有地址姓名以及姓氏并且不能订购东西。另一方面,管理员可以发布新闻。

我可以简单地将所有这些放在一个名为User的类中,并为admin和member都有很多null值,但我认为这是一种非常愚蠢的方法。

我还可以看到我可以有两个不同的类成员和管理员,彼此没有关系。但这对我来说不是一个选择,因为我想使用在.NET.中实现的角色

(我最后想到的是从某个基类继承,但我不知道是否可以这样做,并因此拥有关系数据库。)

所以,我想要的是一些标准的或/和聪明的方法来创建MVC 4中的模型,我可以连接到WebSecurity并使用它提供的所有花哨的方法。

提前感谢

MVC 4特定的角色列

您需要至少有四个表来执行此操作:

  1. UserProfile-它将包含用户名、电子邮件、姓名等,密钥将是唯一的标识符。(我通常使用Int)
  2. MemberData-它将包含密码(当然是散列的)和登录信息(密码重置、确认密钥等)。它们之所以分开有两个原因。1) 编辑UserProfile不会影响登录。2) 注销登录数据。您现在可以让您的用户使用用户名或电子邮件地址登录,而无需更改您的基础架构。此表的键是与UserProfile表的键相关的外键
  3. 角色-这将包含您的角色数据。所需要的只是一个Id(Unique Int)和一个Name
  4. UsersInRoles-此表将包含两列:UserId和RoleId。通过这种方式,可以根据需要为用户分配任意多个或任意少的角色

示例:

UserProfile:
Id    Username    Email
1     user        user@user.com
MemberData:
Id   Password    LastLogin
1    Tx8gke08    08-16-2013
Roles:
Id   Name
1    User
2    Admin
UsersInRoles
UserId    RoleId
1         1
1         2

旁注:网络安全框架已经包含了实现这一切的方法。Roles类包含用于创建、删除和添加用户的方法。它也是使用默认MVC 4项目创建的安全包的标准部分。

首先,我建议使用名称"Customer"而不是"Member",因为Customer是一个更准确的描述——我假设通过"订购东西",您正在处理一个店面。

public abstract class User
{
//All of the shared properties go here
}
public class Customer : User
{
//Customer specific properties
}
public class Admin : User
{
//Admin specific properties
}

这是基本的多态性,实体框架可以很好地处理它。标记User类抽象向EF表明,您不会存储仅为用户的对象。

class UserBase
{
    public string userName ;
    public string password ;
}
class Member : UserBase
{
    public string Email
    public string Address ;
    public string Name ;
    public string Surname ;
}

使用用户名、密码、电子邮件、地址、姓名、姓氏、用户类型创建一个用户

电子邮件、地址、姓名、姓氏列将接受null

然后,您可以查询Users表,并根据TypeOfUser列,您可以实例化UserBaseMember

当更新或插入UserBase时,Email、Address、Name、Surname列将设置为null,否则它们将具有Member属性

的值

1)创建两个角色AdminMember。对于Admin角色,您不需要任何东西,但应该扩展Member2) 创建类成员:

public class Member
{
public int memberid {get; set;}
public Guid UserId {get; set;}
public string name {get; set;}
public string phone {get; set;}
.....
}

正如您所看到的,您只需要通过Guid UserId将其与asp_net User class连接即可。每次,当您在角色Member中使用User时,您都可以通过UserIDMember class获得其他信息。

要从User类访问UserId属性,请使用:

var user = Membership.GetUser();
Guid currentUserID = (Guid)user.ProviderUserKey;