2013-05-16 39 views
1

我正在使用[授權(角色=「管理員」)]等來控制對頁面的訪問,但除此之外,我的客戶想要更多。我們有用戶可以創建SubUser並確定他們可以訪問的屏幕。例如,用戶1可能指示SubUser 1可能會獲得屏幕1-4,但不會獲得5-8(這裏爲了簡單起見,使用數字)。 SubUser 2可能會出現奇怪的畫面,SubUser會得到偶數畫面。基於DB的MVC頁面級安全除了角色

這似乎不是一個基於角色的安全事物。我要爲用戶創建一個屏幕來選擇一個SubUser,然後進入另一個屏幕,每個屏幕都帶有複選框,並檢查SubUser可以訪問的屏幕。很簡單。

我的問題是,如何在應用程序中執行該操作?顯而易見的方法是,在每一個獲得的數據庫中,傳入該用戶名和該屏幕的ID並查看是否有權訪問。有沒有更好的方法,避免在每個頁面上點擊數據庫?由於沒有會話對象,我無法獲得他們可以訪問並存儲在會話中的頁面ID的數組(只有一次)。

回答

0
 public class ServiceCheckAttribute : ActionFilterAttribute 
     { 
      public override void OnActionExecuting(ActionExecutingContext filterContext) 
      { 
       // check user role 
       // Check if user has access to this action/page 
       if (userHasAccess) 
       { 
        base.OnActionExecuting(filterContext); 
       } 
       else 
       { 
        filterContext.Result = new RedirectToRouteResult(new 
        RouteValueDictionary(new { controller = "Error", action = "AccessDenied" })); 
       } 
      } 
     } 
每個地方你需要檢查用戶可達添加此屬性控制器上

[ServiceCheckAttribute]