我是web开发的新手。现在我用ASP.NET Identity学习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")
{
}
...
}
当我们创建一个用户时,他会获得一些带有信息的角色和属性(例如,如果是买家,他将拥有"买家"角色和一些买家属性(而卖家将为空)。
这是一种正常的方法吗?
更新:
我想我选了一个不好的例子(卖方和买方)。在我的情况下,我有一个类似推荐系统(另一个例子):
- 第一类用户,可以添加自己的信息并找到一些物品(例如水果)
- 第二类用户,添加此项目(含附加信息)(例如,苹果、梨、葡萄。其他(第二类型用户)添加蔬菜)
- 最后一种类型的用户,可以添加一些附加信息(例如城市)
系统可以根据用户的附加信息(如最近的经验等)和物品(如种类、成本等)确定用户的偏好(一些蔬菜或水果)
否。这不是你想要的处理方式。用户就是用户。如果你在能力上有真正的区别,你可以使用角色,但在你所描述的大多数系统中,成为"买家"或"卖家"并不是一件非黑即白的事情:那些买东西的人最终可能喜欢卖东西,而卖家可能真的想买东西。我的建议是根本不做任何区分。如果你只想在某人出售之前有一些审批流程或其他东西,那么你可以再次使用"卖家"角色,只有那些被添加到该角色的人才能看到卖家选项。
如果你需要存储买家或卖家独有的信息,那么你也可以使用声明,这比在用户模型中添加额外的属性要灵活得多,而且肯定比创建实际的外键关系来存储额外的数据要灵活得得多。
您应该了解一下Membership和RoleProviders,这是微软处理此问题的标准方法。
然后,您可以从两个选项中选择一个。
-
如果您想简单地使用Microsoft在SQL数据库中存储用户和角色的标准方式,您可以获得Web用户管理。
-
如果您在自定义系统中已经有很多用户和角色,那么您可能需要考虑编写自定义成员资格和角色提供程序,以便将您现有的用户和角色与您想要在站点中执行的操作进行映射。请参阅此处的示例。