Asp.net mvc ASP.NET用户权限

Asp.net mvc ASP.NET用户权限,asp.net-mvc,Asp.net Mvc,我已经用实体框架创建了一个ASP.NET MVC应用程序。由于客户的需求,我必须实施特权层次结构,不同的用户应该/不应该有权列出/查看/编辑不同类型的对象。在某些情况下,我们需要更深入地限制用户编辑对象上的特定属性 我创建了一些角色,但它们更通用,比如“SystemAdmin”角色、“CustomerAdmin”角色eTC 为了使这些权限更为狭窄,角色是我可以使用的一天,还是我应该在数据库中自己创建某种权限 Than提前。如果您使用名称可怕的授权管理器/和AzMan角色提供程序,您可以拥有非常灵

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

我创建了一些角色,但它们更通用,比如“SystemAdmin”角色、“CustomerAdmin”角色eTC

为了使这些权限更为狭窄,角色是我可以使用的一天,还是我应该在数据库中自己创建某种权限


Than提前。

如果您使用名称可怕的授权管理器/和AzMan角色提供程序,您可以拥有非常灵活的角色(带嵌套)和一个。

如果我是您,我会做的是实现规范模式。以下是规范模式的基础:

public interface ISpecification<T>
{
    bool IsSatisfiedBy(T entity);
}
公共接口规范
{
bool符合(T实体);
}
一旦您这样做了,我将实现一个
isspecification
,以指定每个角色的逻辑。然后,您可以创建一个属性,该属性采用控制特定操作授权的规范。下面是一个可能的示例:

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);
    }
}
public类AuthorizeWith:AuthorizeAttribute
{
公共授权(类型规格类型)
{
Specification=Activator.CreateInstance(specificationType)
作为具体化;
}
公共指定规范{get;set;}
受保护的覆盖bool AuthorizeCore(HttpContextBase httpContext)
{
return base.AuthorizeCore(httpContext)&&
规范.issatifiedby(httpContext.User);
}
}

希望这能有所帮助。

哦,这里还有更多关于规范模式的内容。