ASP.NET MVC中的替代用户管理

9
我正在规划一个新的ASP.NET MVC应用程序,需要存储一些不属于ASP.NET MVC User类标准设置的用户信息。这涉及到两个问题。
1)我能否编辑已经使用的类来存储所需的信息?
2)如果我自己开发如何保留认证等功能,使得在使用User.IsAuthenticated方法锁定某些视图时更加方便?
另一个选择是使用提供的User类,将其他信息放入具有GUID用户ID作为外键的单独表中。
有什么建议吗?
3个回答

11

正如@Burt所说,配置文件是一种选择,它提供了很多灵活性。

我曾有过类似的需求,需要跟踪员工信息,但我选择自己编写员工类并创建与标准用户的关系。我非常喜欢这种方式,因为我可以将任何员工特定的业务逻辑与“User class”会员系统分开。

由于并不是每个用户都需要绑定员工,所以这对我的情况更有意义。这可能不适用于您的情况,但这是一种替代方案。

因此,我有类似以下的内容:

public class Employee
{
    public Employee(string name) : this()
    {
        Name = name;
    }

    public virtual string Name { get; set; }
    public virtual string Title { get; set; }
    public virtual decimal Salary { get; set; }
    public virtual decimal Hourly { get; set; }
    public virtual decimal PerDiem { get; set; }
    public virtual string StreetAddress { get; set; }
    public virtual Guid UserId { get; set; }
    public virtual MembershipUser User {
        get
        {
            // note that I don't have a test for null in here, 
            // but should in a real case.
            return Membership.GetUser(UserId);
        }
    }
}

你介意解释一下为什么所有这些属性都是“虚拟”的吗? - nacho10f
这只是使用NHIbernate时产生的噪音。属性必须标记为虚拟,以便NHibernate可以执行其代理操作。 - nkirkes
但是我猜EF也需要这个来实现它的代理和延迟加载功能... 我只是不太明白它的实际用途。 - nacho10f
这是NHibernate的要求,即使您指定了延迟加载或不指定,它也会在未标记为虚拟的映射属性上引发异常。对于EF,如果我没记错的话,只有当您想要将属性作为延迟加载时才需要虚拟属性。无论如何,从NHib的角度来看,实际目的是允许整个实体作为代理返回。这里有一个不错的介绍:http://davybrion.com/blog/2009/03/must-everything-be-virtual-with-nhibernate/ - nkirkes

6
请看ASP.Net MVC Membership Starter Kit,它提供了Asp.Net MVC控制器、模型和视图,用于管理用户和角色。这将为您节省一半的时间。
开箱即用,起始套件提供以下功能:
- 用户列表 - 角色列表 - 用户帐户信息 - 更改电子邮件地址 - 更改用户角色

2
我感谢您的回答,但是我需要的是能够高效查询的附加信息。起始套件中实现的用户帐户信息对于存储和查询用户信息来说并不是非常高效。 - Anthony Potts

3

查看MS提供的会员功能中包含的配置文件。它们是可扩展且相当灵活的。


您可以实现自己的MembershipProvider并扩展MembershipUser。 - DreamSonic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接