ASP.Net 具有多个用户的 MVC 应用程序

ASP.Net MVC application with multiple users

我正在创建一个与设计、建筑等相关的 ASP.Net MVC 应用程序。我需要有两种类型的用户 - 普通人和公司。 Here 我阅读了如何做到这一点。我已经创建了基本的 class ApplicationUser。 classes PersonUserCompanyUser 继承了这个 class 并且有更多的属性。我正在使用 MSSQL 数据库。我有以下问题:

这是我的 classes:

public class ApplicationUser : IdentityUser, IAuditInfo, IDeletableEntity
{
    public ApplicationUser()
    {
        this.Id = Guid.NewGuid().ToString();
        this.Roles = new HashSet<IdentityUserRole<string>>();
        this.Claims = new HashSet<IdentityUserClaim<string>>();
        this.Logins = new HashSet<IdentityUserLogin<string>>();

        this.Notifications = new HashSet<Notification>();
    }

    // Audit info
    public DateTime CreatedOn { get; set; }

    public DateTime? ModifiedOn { get; set; }

    // Deletable entity
    public bool IsDeleted { get; set; }

    public DateTime? DeletedOn { get; set; }

    public virtual ICollection<IdentityUserRole<string>> Roles { get; set; }

    public virtual ICollection<IdentityUserClaim<string>> Claims { get; set; }

    public virtual ICollection<IdentityUserLogin<string>> Logins { get; set; }

    [Required]
    public string Password { get; set; }

    public UserType UserType { get; set; }

    public virtual ICollection<Notification> Notifications { get; set; }
}
public class PersonUser : ApplicationUser
{
    public PersonUser() : base()
    {
        this.Bids = new HashSet<Bid>();
        this.Buildings = new HashSet<Building>();
    }

    [Required]
    public string FirstName { get; set; }

    [Required]
    public string LastName { get; set; }

    public DesignerType DesignerType { get; set; }

    public virtual ICollection<Bid> Bids { get; set; }

    public virtual ICollection<Building> Buildings { get; set; }
}
public class CompanyUser : ApplicationUser
{
    public CompanyUser() : base()
    {
    }

    [Required]
    public string CompanyName { get; set; }

    // That is like Id of the company
    [Required]
    public string Bulstat { get; set; }
}

与您的应用程序中具有不同“类型”的用户相关的问题有两种不同的范围。

权限/授权

这是允许不同类型用户的范围。他们可以调用哪些端点?他们可以访问什么?

对于这个问题范围,您想使用 IdentityRoles 来区分所述用户

数据库关系

这是不同类型的用户在数据库中具有真正不同的 link 到不同 table 的范围。例如,对于您的 SchoolDatabase,您可能有 TeacherUsersStudentUsers 具有一对多关系,反之亦然,但两种类型的用户都可以登录。

在这种情况下,您实际上想要使用不同的 class 来区分继承自基本用户 class 的它们。

Table link 两种类型的用户共享,例如 TeacherStudent 可能都属于 Classroom,你会穿上底座 class。此外,密码、登录名、用户名、电子邮件等内容也可能会出现在 BaseUser class 中,因为每个人都有这些内容。

Table links 是 *uniqueto one type of user would go on that users table. So if Teachers have aCurriculum` 那么您将在 Teacher<->Curriculum 之间添加一个 link,而不是 BaseUser<->Curriculum , 如果学生有家庭作业(但教师没有),那么 link 将专门给学生 table。