0

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

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

会员是普通注册用户。他有用户名密码电子邮件地址姓名姓氏等。他还可以订购东西。

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

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

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

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

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

提前致谢

4

4 回答 4

1

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

  1. UserProfile - 这将包含用户名、电子邮件、姓名等,并且密钥将是唯一标识符。(我通常使用 Int)
  2. MemberData - 这将包含密码(当然是散列的)和登录信息(密码重置、确认密钥等)。将它们分开有两个原因。1) 编辑 UserProfile 不会影响登录。2)解耦登录数据。您现在可以让您的用户使用用户名或电子邮件地址登录,而无需更改您的底层架构。该表的键是与 UserProfile 表的键相关的外键
  3. 角色 - 这将包含您的角色数据。所需要的只是一个 Id(唯一 Int)和一个名称。
  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 项目创建的安全包的标准部分。

于 2013-08-16T18:15:54.417 回答
0
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属性的值

于 2013-08-16T16:55:21.790 回答
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 classby连接起来Guid UserId。每次,当您User在 Role 中使用时,Member您都可以从Member classby获取附加信息UserID

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

var user = Membership.GetUser();
Guid currentUserID = (Guid)user.ProviderUserKey;
于 2013-08-16T19:48:57.450 回答
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
}

这是基本的多态性,Entity Framework 可以很好地处理它。标记 User 类摘要向 EF 表明您不会存储仅是用户的对象。

于 2013-08-16T20:23:19.173 回答