ASP.Net 具有多个用户的 MVC 应用程序
ASP.Net MVC application with multiple users
我正在创建一个与设计、建筑等相关的 ASP.Net MVC 应用程序。我需要有两种类型的用户 - 普通人和公司。 Here 我阅读了如何做到这一点。我已经创建了基本的 class ApplicationUser
。 classes PersonUser
和 CompanyUser
继承了这个 class 并且有更多的属性。我正在使用 MSSQL 数据库。我有以下问题:
- (我的主要问题) 我应该创建
DbSet<PersonUser>
和 DbSet<CompanyUser>
还是应该创建 DbSet<ApplicationUser>
?
- 当我创建数据库连接时,外键应该指向
PersonUser
和 CompanyUser
还是指向 ApplicationUser
?
- 在控制器中,当我根据用户需要使用
UserManager<TUser>
或 SignInManager<TUser>
时,我需要使用不同的属性。我必须有两个 UserManager
还是我应该每次都这样解析 var user = (PersonUser) await this.userManager.GetUserAsync(this.User);
?
这是我的 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,您可能有 TeacherUsers
与 StudentUsers
具有一对多关系,反之亦然,但两种类型的用户都可以登录。
在这种情况下,您实际上想要使用不同的 class 来区分继承自基本用户 class 的它们。
Table link 两种类型的用户共享,例如 Teacher
和 Student
可能都属于 Classroom
,你会穿上底座 class。此外,密码、登录名、用户名、电子邮件等内容也可能会出现在 BaseUser
class 中,因为每个人都有这些内容。
Table links 是 *uniqueto one type of user would go on that users table. So if Teachers have a
Curriculum` 那么您将在 Teacher<->Curriculum 之间添加一个 link,而不是 BaseUser<->Curriculum , 如果学生有家庭作业(但教师没有),那么 link 将专门给学生 table。
我正在创建一个与设计、建筑等相关的 ASP.Net MVC 应用程序。我需要有两种类型的用户 - 普通人和公司。 Here 我阅读了如何做到这一点。我已经创建了基本的 class ApplicationUser
。 classes PersonUser
和 CompanyUser
继承了这个 class 并且有更多的属性。我正在使用 MSSQL 数据库。我有以下问题:
- (我的主要问题) 我应该创建
DbSet<PersonUser>
和DbSet<CompanyUser>
还是应该创建DbSet<ApplicationUser>
? - 当我创建数据库连接时,外键应该指向
PersonUser
和CompanyUser
还是指向ApplicationUser
? - 在控制器中,当我根据用户需要使用
UserManager<TUser>
或SignInManager<TUser>
时,我需要使用不同的属性。我必须有两个UserManager
还是我应该每次都这样解析var user = (PersonUser) await this.userManager.GetUserAsync(this.User);
?
这是我的 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,您可能有 TeacherUsers
与 StudentUsers
具有一对多关系,反之亦然,但两种类型的用户都可以登录。
在这种情况下,您实际上想要使用不同的 class 来区分继承自基本用户 class 的它们。
Table link 两种类型的用户共享,例如 Teacher
和 Student
可能都属于 Classroom
,你会穿上底座 class。此外,密码、登录名、用户名、电子邮件等内容也可能会出现在 BaseUser
class 中,因为每个人都有这些内容。
Table links 是 *uniqueto one type of user would go on that users table. So if Teachers have a
Curriculum` 那么您将在 Teacher<->Curriculum 之间添加一个 link,而不是 BaseUser<->Curriculum , 如果学生有家庭作业(但教师没有),那么 link 将专门给学生 table。