我正在寻找一种使用像WebSecurity这样的.NET类来实现登录系统的方法,因为使用它们看起来很紧张。我需要具有不同角色的登录系统,我使用EF代码第一种方法MVC 4.
问题是我不知道应该如何代表不同角色的用户。 这是一个例子:
会员是常规注册用户。他有用户名,密码,电子邮件,地址,名称,姓氏等他也可以订购。
管理员只是管理员他与用户名和密码等成员有一些共同点,但他没有地址,姓名,姓氏,无法订购。 另一方面,管理员可以发布新闻。
我可以简单地将所有这些放在一个名为User的类中,并且管理员和成员都有很多空值,但我认为这是非常愚蠢的方法。
我也可以看到我可以有两个不同的类成员和管理员彼此无关。但它不是我的选择,因为我想使用.NET中实现的角色。
(我想到的最后一个想法是从一些基类继承,但我不知道是否可以做,并且结果有关系数据库。)
所以我要求的是在MVC 4中创建模型的一些标准或/和聪明的方法,我可以将其与WebSecurity连接并使用它提供的所有那些奇特的方法。
提前致谢
答案 0 :(得分:1)
您需要至少有四个表来执行此操作:
示例:
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)创建两个角色Admin
和Member
。对于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 class
与Guid UserId
联系起来即可。每当您在角色User
中使用Member
时,您都可以Member class
从UserID
获取其他信息。
要从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表明您不会存储仅属于用户的对象。