C# 如何在ASP.NET标识中创建不同的用户类型?

C# 如何在ASP.NET标识中创建不同的用户类型?,c#,asp.net,asp.net-mvc,entity-framework,asp.net-identity,C#,Asp.net,Asp.net Mvc,Entity Framework,Asp.net Identity,我是网络开发新手。现在我学习使用ASP.NET标识的ASP.NET MVC 5。 在我的情况下,你能给我一些建议吗: 在我的网站中,我希望有一些类型的用户。例如: 买主 卖方 他们每个人都可以登录并控制自己的部分信息。(例如,买方可以更改其信息、添加请求。卖方也可以更改其自己的信息和添加商品) 现在,我创建了如下内容: using Microsoft.AspNet.Identity.EntityFramework; using System.Data.Entity; public class

我是网络开发新手。现在我学习使用ASP.NET标识的ASP.NET MVC 5。 在我的情况下,你能给我一些建议吗:

在我的网站中,我希望有一些类型的用户。例如: 买主 卖方

他们每个人都可以登录并控制自己的部分信息。(例如,买方可以更改其信息、添加请求。卖方也可以更改其自己的信息和添加商品)

现在,我创建了如下内容:

using Microsoft.AspNet.Identity.EntityFramework;
using System.Data.Entity;

public class ApplicationUser : IdentityUser
{
    public int? BuyerId { get; set; }
    public int? SellerId { get; set; }

    public virtual Buyer Buyer { get; set; }
    public virtual Seller Seller { get; set; }
}

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection")
    {
    }

    ...

}
使用Microsoft.AspNet.Identity.EntityFramework;
使用System.Data.Entity;
公共类应用程序用户:IdentityUser
{
public int?BuyerId{get;set;}
公共int?SellerId{get;set;}
公共虚拟买方{get;set;}
公共虚拟卖方{get;set;}
}
公共类ApplicationDbContext:IdentityDbContext
{
公共应用程序上下文()
:base(“默认连接”)
{
}
...
}
当我们创建一个用户时,他会得到一些角色和带有信息的属性(例如,如果是买方,他将拥有“买方”角色和一些买方属性(卖方将为空)

这是正常的做法吗

更新:

我想我选择了一个不好的例子(卖方和买方)。在我的例子中,我有类似于推荐系统的东西(另一个例子):

  • 第一类用户,可以添加关于自己的信息并查找某些项目(例如水果)
  • 第二类用户,添加此项(带有附加信息)(例如苹果、梨、葡萄。其他(第二类用户)添加蔬菜)
  • 最后一类用户,可以添加一些附加信息(例如城市)

  • 系统可以根据有关用户的附加信息(例如最近的经验等)和项目(例如种类、成本等)来确定用户的偏好(一些蔬菜或水果)

    您应该看看会员和角色提供者,微软处理这一问题的标准方法

    然后,您可以从两个选项中选择一个

  • 如果您在自定义系统中已经有很多用户和角色,那么您可能需要研究编写自定义成员资格和角色提供程序,以将您现有的用户和角色映射到您希望在站点中执行的操作


  • 不,这不是你想要的处理方式。用户就是用户。如果你在功能上有真正的区别,你可以使用角色,但在大多数系统中,如你所描述的,作为“买家”或“卖家”这并不是一件黑白分明的事情:那些买东西的人最终可能会想卖东西,而卖家可能真的想买东西。我的建议是不要做任何区分。如果你想在别人可以卖东西之前只需要一些批准流程或什么,那么你可以再次使用“卖家”角色,并且只有添加到该角色的人才能看到卖方选项


    如果您需要存储买家或卖家独有的信息,那么您也可以使用声明,这比向用户模型中添加附加属性灵活得多,而且肯定比创建实际外键关系来存储额外数据灵活得多。

    OP使用ASP.NET标识,因此会员资格和Role提供者不适用。是的,Chris,你当然是对的。我的回答有点老派。我不知道去年的ASP.NET新开发身份。我必须阅读本文()以了解更多。是的,我希望用户是唯一的。我更新了我的帖子(添加了另一个任务示例)。感谢“声明”的想法,我将进一步研究这件事。再次强调,这就是角色和声明的意义。ASP.NET Identity实际上有点出色,因为它将用户的概念简化为它应该是什么:一个要进行身份验证的帐户。所有关于用户可以做什么的业务逻辑都应该由角色来处理,所有关于用户可以做什么的逻辑都应该由角色来处理ave可以通过索赔处理。