2009-10-14 160 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