2014-10-20 16 views
6

Więc staram się realizować różnego rodzaju użytkowników na mój wniosek, po pierwsze, powiedzmy, że istnieje tylko jeden rodzaj użytkownika:Różne typy użytkowników w ASP.NET Identity 2.0

public class ApplicationUser : IdentityUser 
{ 
    // Other Properties 
    public int TeacherID { get; set; } 

    [ForeignKey("TeacherID ")] 
    public virtual Teacher Teacher { get; set; } 
} 

public class Teacher 
{ 
    [Key] 
    public int TeacherID { get; set; } 
    public int UserID { get; set; } 
    // Other properties 

    [ForeignKey("UserID")] 
    public virtual ApplicationUser User { get; set; } 
} 

Jest jeden do jedna relacja między tymi dwoma elementami, ale co, jeśli jest więcej niż jeden typ użytkownika? Nie mogę mieć tego klucza obcego w jednostce Użytkownik, myślę, że zmierzam w złym kierunku.

Jeśli chodzi o używanie ról w tym celu, dla każdego z nich istnieje administrator, nauczyciel, uczeń i różne rodzaje ról, ale co się stanie, jeśli chcę przechowywać dodatkowe właściwości dla każdego rodzaju roli?

public class IdentityUserRole<TKey> 
{ 
    public IdentityUserRole(); 

    // Resumen: 
    //  RoleId for the role 
    public virtual TKey RoleId { get; set; } 
    // 
    // Resumen: 
    //  UserId for the user that is in the role 
    public virtual TKey UserId { get; set; } 
} 

To znaczy, mogę przedłużyć klasy IdentityUserRole i dodać więcej właściwości, ale w jaki sposób dodać właściwości do każdego rodzaju roli?

+0

Nie można dodawać właściwości do poszczególnych rodzajów ról. Wszystkie role będą zawierały wszystkie właściwości zawarte w tabeli UserRole, ponieważ każda właściwość będzie kolumną, ale możesz przypisać różne obowiązki do różnych ról. Lub Możesz użyć uwierzytelniania opartego na roszczeniach. Sprawdź te filmy, aby utworzyć niestandardowe role. http://stackoverflow.com/questions/25857806/extending-identityuserrole-in-identity-2-0/25857923#25857923 – DSR

Odpowiedz

4

Z pewnością ma sens używanie do tego celu ról, ale oznacza to, że można przydzielić wiele ról. więc użytkownik może być Nauczycielem i Uczniem, ale może się to zdarzyć.

Jeśli chcesz dodać dodatkowe właściwości do klasy ról, robi się to w taki sam sposób jak dla użytkownika. Stwórz swoją własną wersję Role tak:

public class ApplicationRole : IdentityRole 
{ 
    public string bool CanJuggle { get; set; } 
} 

I trzeba klasę RoleManager iść z nim:

public class ApplicationRoleManager : RoleManager<ApplicationRole> 
{ 
    public ApplicationRoleManager(IRoleStore<ApplicationRole> store) 
     : base(store) 
    { } 

    //snip 
} 

i nie zapominając context musi się zmienić:

public class YourContext : IdentityDbContext<ApplicationUser, ApplicationRole, string, IdentityUserLogin, IdentityUserRole, IdentityUserClaim> 
{  
    //snip 
} 

Pomyśl, że obejmuje wszystkie odpowiednie części.

+0

Wciąż jestem z tym zdezorientowany. Chcę, aby każdy typ użytkownika przechowywał różne właściwości, więc mogę mieć rolę Nauczyciela, rolę Koordynatora itp., A każdy z nich ma swoje zadanie. –

Powiązane problemy