2013-04-18 154 views
0

我不確定該怎麼處理我的問題。我想創建一個用於檢查角色和權限的自定義授權屬性。我們的權限不是您的標準這個角色擁有這些權限,但更多的每個角色可以擁有一些權限但不是其他權限。傳遞參數和自定義屬性

我已經覆蓋在AuthorizeAttribute類的AuthorizeCore方法:

internal class RoleAttribute : AuthorizeAttribute 
{ 
    private readonly IUserRepository _userRepository; 
    private readonly IPermissionRepository _permissionRepository; 

    public RoleAttribute(IUserRepository userRepository, IPermissionRepository permissionRepository) 
    { 
     _userRepository = userRepository; 
     _permissionRepository = permissionRepository; 
    } 

    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     User user = _userRepository.GetUsers(); 
     Permission permission = _permissionRepository.GetPermissions(); 
     return user.Permissions.Where(x => x.Id == permission.Id).Any(); 
    } 
} 

所以,當我實現屬性:

我不能依賴注入到被覆蓋的方法,因爲我不能再通注入到屬性中。

我意識到這不是解決問題的好方法,但直到我們能夠與客戶合作,讓我們走向更好的實踐,我需要相應地開發。

我的主要問題是:是否有更好的方式來創建一個自定義的授權過濾器,允許這種類型的行爲?

回答

1

如果您認爲僅僅是因爲您在控制器中實例化了存儲庫,那麼每個請求都會使用相同的實例,這是錯誤的。控制器將每次實例化。因此,您不僅僅是通過實例化屬性中的回購來節省自己。考慮到使用屬性的限制,實際上沒有更好的方法來讓它訪問依賴關係,並且在控制器上使用靜態是一個非常糟糕的主意。

相關問題