确定应用程序中的用户类位置

时间:2012-02-03 08:51:48

标签: c# asp.net-mvc nhibernate domain-driven-design application-design

我不确定这一切应该如何运作。所以我的域模型中有一个聚合(Post - > Feedbacks; Post - > Category)。我一直在考虑User班的地方。我的第一个想法是使用状态模式实现User类:

interface IUserRole
{
    // for example we got something like this:
    Boolean CanPost { get; }
    Boolean CanEdit { get; }
    Boolean CanFlag { get; }

    void AssignRole(IUserRole role, User user);
}

public sealed class AdministratorRole : IUserRole
{
    public Boolean CanPost { get { return true; } }
    public Boolean CanEdit { get { return true; } }
    public Boolean CanFlag { get { return true; } }

    public void AssignRole(IUserRole role, User user)
    {
        user.Role = role;
    }
}
public sealed class NewMemberRole : IUserRole
{
    public Boolean CanPost { get { return true; } }
    public Boolean CanEdit { get { return false; } }
    public Boolean CanFlag { get { return false; } }

    public void AssignRole(IUserRole role, User user)
    {
        throw new NotSupportedException("text");
    }

}

public class User // : Entity<User>
{
    private IUserRole role;
    public class User(String name, String pwd, IUserRole role)
    {
        // ...
        this.role = role;
    }

    public Boolean CanPost { get { return this.role.CanPost; } }
    public Boolean CanEdit { get { return this.role.CanEdit; } }
    public Boolean CanFlag { get { return this.role.CanFlag; } }

    public void AssignRole(IUserRole role, User)
    {
        this.role.AssignRole(role, user);
    }

    public String Name { get; set; }
    public String Password { get; set; }
}     

在这一步中,我一直在考虑将User纳入域模型,然后通过NHibernate DAL / DAO使用它。

我读过MembershipUserMembershipProvider。所有身份验证都是在标准ASP.NET MVC模板中实现的。

因此,如果我使用标准成员资格/成员资格用户域逻辑将在哪里?我是否应该限制对Post实体的操作,通过设置Authorize属性操作..所以它们将作为权限工作?

1 个答案:

答案 0 :(得分:0)

是的,在ASP.NET MVC应用程序中,您可以对操作授权/拒绝某些用户/角色。 它适用于项目中定义的成员资格提供程序。

默认情况下,.NET提供了2个成员资格提供程序:一个用于sqlserver,一些脚本可以运行,另一个基于ActiveDirectory成员资格。

您还可以创建自己的MembershipRole提供商。这样,您就可以根据域对象/行为自定义成员资格提供程序。