2009-10-14 127 views
2

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

我设计了几个角色,但他们更通用的像“SystemAdmin” -role,一个“CustomerAdmin” -role等

为了使theese更窄的权限,角色是当天去或者是还有其他的东西我可以使用,或者我应该在数据库中自己创建某种特权?

Thans提前。

回答

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); 
    } 
} 

希望有所帮助。

+0

哦,这里有更多的规格模式。 http://en.wikipedia.org/wiki/Specification_pattern – zowens 2009-10-14 16:31:11