gpt4 book ai didi

asp.net - 如何在 ASP.NET Identity 中定义不同的用户类型?

转载 作者:行者123 更新时间:2023-12-04 02:07:17 26 4
gpt4 key购买 nike

关闭。这个问题需要更多 focused .它目前不接受答案。












想改进这个问题?更新问题,使其仅关注一个问题 editing this post .

7年前关闭。




Improve this question




在我的应用程序中,我使用的是 ASP.NET 标识,并且我有不同类型的用户(教师、学生、...),它们有自己的属性,对于教师,我有 Experience, Languages Spoken, Certifications, Awards, Affiliations, ...对于学生,我有不同的属性。因此,由于每个用户的信息不同,因此我无法使用角色。所以他们实际上都是用户,我的意思是他们可以登录我的网站。他们还有共同的注册信息:First Name, Last Name, Email, Password现在你怎么想,这样做的最佳选择是什么?我应该为每个继承自 IdentityUser<int, CustomUserLogin, CustomUserRole, CustomUserClaim> 的用户创建类吗? ?
任何的想法?

PS : 我找到了一些解决方案,例如 here建议是使用 Claims 但对我来说还不够清楚,实际上 Claims 是难题的一部分,我不明白它们是什么? :),最好有例子。谢谢

最佳答案

方法#1:

claim 方法可能是要走的路。所以你得自 IdentityUser以正常方式并将公共(public)属性添加到派生类。然后对于每种类型的用户,您将使用 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));

这些将为不同类型的用户添加不同的声明。所以 teacher声称拥有“10”的“app_experience”、“Award1”和“Award2”的“app_awards”等。另一方面, student声称只有“app_grade”为“2”。

基本上,第一个参数标识声明的类型,第二个参数是支持该声明的数据。类型可以是任何类型,因此请选择对您的应用程序有意义的类型,并为每个名称添加前缀以将其与其他名称区分开来。在这种情况下,我刚刚添加了“app”前缀。

然后您可以使用 UserManager.GetClaimsAsync获取用户的所有声明并在返回的列表中搜索您感兴趣的声明。

方法#2

另一种方法是创建一个 AppUser上课,然后 TeacherStudent派生自 AppUser 的类.在这些类中,您将添加属性,否则这些属性将在上面的示例中作为声明添加。

这样做的轻微缺点是您必须为这些不同的用户中的每一个创建单独的表,并与 ASP.NET 身份用户表有关系。

另外,使用 FindByUserNameAsync , FindByEmailAsync等,只会返回一种类型的 TUser ,在这种情况下, AppUser .此外,这些方法只会查询一张表, AspNetUsers ,因此您可以从相关的 Teacher 中获取额外信息或 Student table 。

关于asp.net - 如何在 ASP.NET Identity 中定义不同的用户类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29566038/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com