MVC 4角色的特定列

时间:2013-08-16 16:36:03

标签: c# asp.net-mvc-4 login relational-database roles

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

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

会员是常规注册用户。他有用户名密码电子邮件地址名称姓氏等他也可以订购。

管理员只是管理员他与用户名密码等成员有一些共同点,但他没有地址姓名姓氏,无法订购。 另一方面,管理员可以发布新闻。

我可以简单地将所有这些放在一个名为User的类中,并且管理员和成员都有很多空值,但我认为这是非常愚蠢的方法。

我也可以看到我可以有两个不同的类成员和管理员彼此无关。但它不是我的选择,因为我想使用.NET中实现的角色。

(我想到的最后一个想法是从一些基类继承,但我不知道是否可以做,并且结果有关系数据库。)

所以我要求的是在MVC 4中创建模型的一些标准或/和聪明的方法,我可以将其与WebSecurity连接并使用它提供的所有那些奇特的方法。

提前致谢

4 个答案:

答案 0 :(得分:1)

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

  1. UserProfile - 这将包含用户名,电子邮件,姓名等,密钥将是唯一的标识符。 (我通常使用Int)
  2. MemberData - 这将包含密码(当然是哈希)和登录信息(密码重置,确认密钥等)。由于两个原因,这些是分开的。 1)编辑UserProfile不会影响登录。 2)解耦登录数据。您现在可以让用户使用用户名或电子邮件地址登录,而无需更改基础架构。此表的关键是与UserProfile表的键相关的外键
  3. 角色 - 这将包含您的角色数据。所需要的只是Id(唯一的Int)和名称。
  4. UsersInRoles - 此表将包含两列:UserId和RoleId。这样,可以根据需要为用户分配尽可能多的角色。

  5. 示例:

    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
    

    旁注: Web安全框架已经包含了执行所有这些操作的方法。 Roles class包含用于创建,删除和添加用户的方法。它也是使用默认MVC 4项目创建的安全包的标准部分。

答案 1 :(得分:0)

class UserBase
{
    public string userName ;
    public string password ;

}

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

使用用户名,密码,电子邮件,地址,姓名,姓氏,TypeOfUser

创建一个用户

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

然后,您可以查询用户表,并根据列 TypeOfUser ,您可以实例 UserBase 会员

更新或插入 UserBase 时,电子邮件,地址,姓名,姓氏列将设置为null,否则它们将具有会员属性

答案 2 :(得分:0)

1)创建两个角色AdminMember。对于Admin角色,您不需要任何内容​​,但Member您应该扩展 2)创建班级成员:

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

如您所见,您只需将asp_net User classGuid UserId联系起来即可。每当您在角色User中使用Member时,您都可以Member classUserID获取其他信息。

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

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

答案 3 :(得分:0)

首先,我建议使用“客户”这个名称而不是“会员”,因为客户是一个更准确的描述 - 我假设您正在处理店面的“订购事项”。

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表明您不会存储仅属于用户的对象。