【问题标题】:One to many users based on a club基于俱乐部的一对多用户
【发布时间】:2021-02-08 11:30:02
【问题描述】:

我有一个包含俱乐部和会员的网站,我正在检查这是链接其会员的正确方式。

我的俱乐部可以有很多成员,这些成员可以是用户或管理员。

public  class Club    {
    public int Id { get; set; }
    public Guid? TeannatId { get; set; }
    public Guid? UserId { get; set; }
    public string? Name { get; set; }       
    public string? Description { get; set; }     
    public List<ApplicationUser>? Members { get; set; }
}

我是否也应该在此处存储我的 asp 网络身份角色,我的意思是获取关系还是保持原样。

 public class ApplicationUser : IdentityUser   {
    public enum UserTypeEnum
    {
        Guest=0,
        User=1,
        Author=2,
        AddonOwner=3,
        GroupOwner=5,
        SuperAdmin=199
    }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public bool isOnline { get; set; }
    public int UserType { get; set; }
    public Guid TennantId { get; set;}
    public Guid? ClubId { get; set; }
    public List<Badges> Badges { get; set; }


}

我想我需要在这里以某种方式将关系设置回用户?

protected override void OnModelCreating(ModelBuilder modelBuilder)  {
  base.OnModelCreating(modelBuilder);         
}

【问题讨论】:

    标签: c# ef-core-3.1


    【解决方案1】:

    我强烈建议您不要使用枚举作为您的用户类型。最好为它创建一个特殊的表:

    public UserType
        {
          public int Id {get; set;}
          public string Name {get; set;}
        }
    

    你的 ApplicationUser 类会是这样的

    
    public class ApplicationUser : IdentityUser  
     {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public bool isOnline { get; set; }
        public int UserTypeId { get; set; }
        public virtual UserType UserType { get; set; }
        public Guid TennantId { get; set;}
        public virtual Tenant Tennant { get; set;}
        public Guid? ClubId { get; set; }
        public virtual Club Club { get; set; }
        public List<Badges> Badges { get; set; }
    }
    
    

    然后删除 ?来自会员

    public virtual List<ApplicationUser> Members { get; set; }
    

    因为 List 默认为空。

    【讨论】:

    • 我创建了角色,但我使用用户类型为成员层定义更多特定于应用程序的角色,可能措辞令人困惑,然后当我打电话给俱乐部以确保用户获得填充
    • 是的,如果您希望立即填充 Club 实例的成员,您必须使用 context.Clubs.Include(m=> m.Members)
    • 但有时俱乐部可能没有会员,只有管理员,或者我会将他视为会员
    • 是的,我会这样做。最好为每个人使用相同的代码,并且不要为每个用户类型使用不同的代码。我想每个俱乐部至少都有一个管理员。如果它只有一个成员,则该成员是管理员。但如果您不喜欢在成员中包含管理员,您可以使用此代码 - .Include(i=>i.Members.Where (x=> x.UserType.Name !=" SuperAdmin"))
    • 您如何建议那些我想在俱乐部和管理员或成员角色中创建用户的人,然后正如您所说,超级用户将对我理解的所有俱乐部拥有所有完整的管理员权限这不是让会员成为管理员或会员经理的第一部分
    猜你喜欢
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    相关资源
    最近更新 更多