【问题标题】:MVC 4 specific columns for roles [closed]角色的 MVC 4 特定列[关闭]
【发布时间】:2013-08-19 03:31:45
【问题描述】:

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

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

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

Admin 只是管理员,他与成员有一些共同点,例如 usernamepassword,但他没有 Address , Name, Surname 并且不能订购东西。 另一方面,管理员可以发布新闻。

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

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

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

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

提前致谢

【问题讨论】:

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


    【解决方案1】:

    首先,我建议使用名称“客户”而不是“会员”,因为客户是更准确的描述 - 我假设您正在与店面打交道。

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

    【讨论】:

      【解决方案2】:

      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;}
      .....
      }
      

      如您所见,您只需通过Guid UserId 将其与asp_net User class 连接即可。每次,当您在角色Member 中使用User 时,您可以通过UserIDMember class 获取附加信息。

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

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          【解决方案4】:
          class UserBase
          {
              public string userName ;
              public string password ;
          
          }
          
          class Member : UserBase
          {
              public string Email
              public string Address ;
              public string Name ;
              public string Surname ;
          }
          

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

          创建一个用户

          Email,Address,Name,Surname, 列将接受 null

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

          当更新或插入 UserBase 时,列 Email,Address,Name,Surname, 将设置为 null,否则它们将具有 的值>会员属性

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-09-01
            • 2018-05-27
            • 2016-12-03
            • 2016-10-15
            • 2014-01-23
            • 2012-09-23
            • 1970-01-01
            相关资源
            最近更新 更多