Sir*_*ifi 11 asp.net asp.net-mvc asp.net-identity-2
在我的应用程序中,我使用的是ASP.NET身份,我有不同类型的用户(教师,学生,...),他们有自己的属性,对于我有老师Experience, Languages Spoken, Certifications, Awards, Affiliations, ...,对于学生,我有不同的属性.因此,由于每个用户的信息不同,我不能使用角色.所以他们实际上都是用户,我的意思是他们可以登录我的网站.此外,他们还有注册的常用信息:First Name, Last Name, Email, Password您现在的想法是什么?这样做的最佳选择是什么?我应该为每个继承的用户创建类IdentityUser<int, CustomUserLogin, CustomUserRole, CustomUserClaim>吗?任何的想法?
PS:我已经找到了一些解决方案,例如这里建议使用声明但是它对我来说不够清楚,实际上声明是难题的一部分而且我没有得到它们是什么?:),最好有例子.谢谢
Mot*_*oSV 10
Apporach#1:
索赔方法可能是最佳选择.因此,您IdentityUser以正常方式派生并将公共属性添加到派生类.然后,对于每种类型的用户,您将使用添加额外的声明UserManager.AddClaimAsync.
因此,例如,假设您创建了一个名为的新类用户类AppUser.然后你可以这样做:
AppUser teacher = new AppUser { /* fill properties here */ };
/* Save User */
await userManager.AddClaimAsync(teacher.Id, new Claim("app_usertype", "teacher"));
await userManager.AddClaimAsync(teacher.Id, new Claim("app_grade", 4));
await userManager.AddClaimAsync(teacher.Id, new Claim("app_exp", 10));
await userManager.AddClaimAsync(teacher.Id, new Claim("app_awards", "Award1,Award2"));
await userManager.AddClaimAsync(teacher.Id, new Claim("app_langspoken", "English,French,German"));
AppUser student = new AppUser { /* fill properties here */ };
/* Save User */
await userManager.AddClaimAsync(student.Id, new Claim("app_usertype", "student"));
await userManager.AddClaimAsync(student.Id, new Claim("app_grade", 2));
Run Code Online (Sandbox Code Playgroud)
这些将为不同类型的用户添加不同的声明.因此teacher声称"app_experience"为"10","app_awards"为"Award1"和"Award2"等.另一方面student声称只有"app_grade"为"2".
基本上,第一个参数标识声明的类型,第二个参数是备份声明的数据.类型可以是任何类型,因此请选择对您的应用程序有意义的内容,并为每个名称添加前缀以区别于其他名称.在我刚刚以"app"为前缀的情况下.
然后,您可以使用UserManager.GetClaimsAsync获取用户的所有声明并在返回的列表中搜索您感兴趣的声明.
方法#2
另一种方法是创建一个AppUser类,然后Teacher和Student类源自AppUser.在这些类中,您将添加在上面的示例中将作为声明添加的属性.
这方面的一个小缺点是,您必须为这些不同用户中的每一个创建单独的表,并将关系返回到ASP.NET Identity用户表.
另外,在这种情况下,使用FindByUserNameAsync,FindByEmailAsync等只会返回一种类型.此外,这些方法只会查询一个表,因此您可以从相关或表中获取额外信息.TUserAppUserAspNetUsersTeacherStudent
| 归档时间: |
|
| 查看次数: |
3511 次 |
| 最近记录: |