C# · 12月 29, 2021

c# – 多个独立注册和登录表单.NET Identity 2.0

在MVC 5中创建一个新项目会启动所有必需的类来处理角色和用户,我可以修改自定义属性.我无法想像的是,在我的情况下,我有多种不同类型的用户,例如主管理员,管理员,作者,供应商和租户.

所有这些都具有不同的属性以及一些共享的属性.通常,我将实现每种类型的用户名&密码在他们各自的数据库表中. ASP.NET身份是一种非常诱人的方式来拥有用户的集中存储,其优点是以易于使用的方式管理身份验证的行动结果.

我已经从谷歌搜索中读取了每一个结果,但与我的场景相似的唯一解决方案是使用声明(据我所知,这并不是为了处理这种具体情况)

如果有一种asp.net身份支持这种场景,我正在游荡?

任何帮助将不胜感激.谢谢.

解决方法 你有两个选择来满足你的目的:

>使用一个共享的ApplicationUser类并分离表单
通过角色授权.因此,您可以使用条件输入创建一个表单(根据使用RoleManager的用户角色,限制使用if(User.IsInRole(“UserTypeName”))显示的内容,或为每个用户类型创建单独的视图,并在控制器端授权它们.
>使用简单的继承来实现每个用户类型
属性.

喜欢:

public class CustomUser: ApplicationUser{ …}

您将在AspNetUsers表中最后添加一个Discriminator列,该列将帮助Entity Framework识别该行应该为该行(CustomUser或ApplicationUser)实例化哪个类.那么你可以正常查询,或者只想要一个特定的类型或另一个,你可以使用OfType< T>喜欢:

var customUsers = db.Users.OfType<CustomUser>();

请记住,您添加到继承类的任何属性必须为空.在数据库级别不需要像CustomUser这样的DateTime,因为它不能保存一个ApplicationUser,而不是该属性.但是,这只是数据库级的一个问题.您仍然可以使用视图模型从CustomUser创建一个特定的属性,从前端来看.