多个独立的注册和登录表单.NET Identity 2.0

Kem*_*min 10 c# asp.net asp.net-mvc asp.net-mvc-5 asp.net-identity

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

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

我已经阅读了谷歌搜索的每一个结果,但与我的场景类似的唯一解决方案是使用声明(据我所知,并非专门用于处理这种特定情况)

如果有一种方式asp.net身份支持这种情况,我在徘徊?

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

Ami*_*rzi 1

您有两种选择来实现您的目的:

  1. 使用共享ApplicationUser类并通过授权做形式分离Rolesif(User.IsInRole("UserTypeName"))因此,您可以根据用户的角色创建一个带有条件输入的表单(限制在 razor 中显示的内容) RoleManager,或者为每个用户类型创建单独的视图并在控制器端对它们进行授权。
  2. 使用简单的继承来根据每个用户类型的属性来实现它。

喜欢:

public class CustomUser: ApplicationUser
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

您最终将在AspNetUsers表中得到一个鉴别器列,该列将帮助实体框架识别应该为行(或行)实例化哪个类。然后您可以像平常一样查询,或者如果您只想要一种或另一种特定类型,您可以使用:CustomUserApplicationUserOfType<T>

var customUsers = db.Users.OfType<CustomUser>();
Run Code Online (Sandbox Code Playgroud)

请记住,添加到继承类的任何属性都必须是nullable. 您不能要求在数据库级别要求诸如DateTimeon之类的东西,因为它会阻止保存 an ,而它不具有该属性。然而,这只是数据库级别的问题。您仍然可以使用视图模型从前端角度创建所需的特定属性。CustomUserApplicationUserCustomUser