Один ко многим пользователям на основе клуба

У меня есть сайт с клубами и участниками, и я просто проверяю, правильно ли связать его участников.

В клубе может быть много членов, и эти члены могут быть пользователями или администраторами.

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

person csharpdudeni77    schedule 08.02.2021    source источник


Ответы (1)


Я настоятельно рекомендую вам не использовать enum в качестве типа пользователя. Для него лучше создать специальную таблицу:

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

поскольку список по умолчанию равен нулю.

person Serge    schedule 08.02.2021
comment
У меня есть созданные роли, но я использовал типы пользователей, чтобы определить больше ролей, специфичных для приложения, для уровня члена, возможно, формулировка сбивает с толку, нужно ли мне использовать функцию включения, а затем, когда я звоню в клубы, чтобы убедиться, что пользователи заселены - person csharpdudeni77; 08.02.2021
comment
Да, если вы хотите, чтобы члены экземпляра Club были заполнены немедленно, вы должны использовать context.Clubs.Include(m=> m.Members) - person Serge; 08.02.2021
comment
Но иногда в клубе может не быть членов, только админ, или я буду относиться к нему как к члену? - person csharpdudeni77; 08.02.2021
comment
Да, я бы поступил так. Всегда лучше использовать один и тот же код для всех и не использовать разные коды для каждого типа пользователей. Я думаю, что в каждом клубе есть как минимум админ. И если он имеет только одного члена, этот член является администратором. Но если вы не хотите включать администратора в состав участников, вы можете использовать этот код — .Include( i=›i.Members.Where ( x=› x.UserType.Name != SuperAdmin)) - person Serge; 08.02.2021
comment
Как бы вы посоветовали тем, где я хотел бы сделать пользователя в клубе и роль администратора или члена, тогда, как вы говорите, суперпользователи будут делать все полные права администратора во всех клубах, я понимаю, что это немного, просто не первая часть сделать участников администраторами или менеджерами участников - person csharpdudeni77; 09.02.2021
comment
Вроде как роли в ролях, я думаю - person csharpdudeni77; 09.02.2021
comment
Вы можете назначать любые роли - админ одного клуба или админ всех клубов. Возможно, вы также должны оставаться типом использования для роли пользователя. - person Serge; 09.02.2021
comment
Так что держите мой тип пользователя enum, который вы считаете типом подчиненного члена - person csharpdudeni77; 09.02.2021