我用实体框架创建了一个ASP.NET MVC应用程序。由于客户的需求,我将不得不实现权限层次,其中不同的用户应该/不应该有权列出/查看/编辑不同类型的对象。在某些情况下,我们需要更深入地限制用户编辑对象上的某个属性。
我创建了一些角色,但它们更像是一个“SystemAdmin”-role,一个“CustomerAdmin”-role e t c
为了使这些角色变得更加狭窄,角色是可行的日子还是我可以使用的其他东西,还是应该在数据库中自己创建某种特权?
提前吃完。答案 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。