ASP.NET用户权限

时间:2009-10-14 13:01:10

标签: asp.net-mvc

我用实体框架创建了一个ASP.NET MVC应用程序。由于客户的需求,我将不得不实现权限层次,其中不同的用户应该/不应该有权列出/查看/编辑不同类型的对象。在某些情况下,我们需要更深入地限制用户编辑对象上的某个属性。

我创建了一些角色,但它们更像是一个“SystemAdmin”-role,一个“CustomerAdmin”-role e t c

为了使这些角色变得更加狭窄,角色是可行的日子还是我可以使用的其他东西,还是应该在数据库中自己创建某种特权?

提前吃完。

2 个答案:

答案 0 :(得分:3)

如果我是你,我会做的是实施规范模式。以下是规范模式的基础知识:

public interface ISpecification<T>
{
    bool IsSatisfiedBy(T entity);
}

一旦你这样做,我会实现一个ISpecification<IPrincipal>来指定每个角色的逻辑。然后,您可以创建一个属性,该属性采用可控制特定操作的授权的规范。这是一个可能看起来如何的例子:

public class AuthorizeWith : AuthorizeAttribute
{
    public AuthorizeWith(Type specificationType)
    {
        Specification = Activator.CreateInstance(specificationType)
                             as ISpecification<IPrincipal>;
    }

    public ISpecification<IPrincipal> Specification { get; set; }

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        return base.AuthorizeCore(httpContext) &&
                Specification.IsSatisfiedBy(httpContext.User);
    }
}

希望有所帮助。

答案 1 :(得分:1)

如果您使用可怕名称的授权管理器/ AzMan和AzMan角色提供程序,您可以拥有非常灵活的角色(使用嵌套)和simple tie-in to ASP.NET roles