0

我開始一個新的項目,我有一個關於與ASP.Net MVC 3ASP.NET自定義角色提供者:角色取決於上下文嗎?

我需要有一個角色驗證我的構造的幾個操作的自定義角色提供的問題,所以我說我的,好吧容易,我可以使用角色提供者。

的問題是,作用是根據當前的「上下文」的:

在我的數據庫實際上用戶鏈接到幾個「實體」,並有實體X的作用「A」,並角色B爲實體Y.將顯示/編輯的所有數據都是該實體的「子女」

嚴格分隔:當我們登錄時,我們必須選擇我們想要工作的實體,然後,直到我們要求更改實體,我們將只有這個實體的數據和這個實體的權利。

當前的「實體」將被存儲在會話中。

的目標是對實體X未授權菜單/動作,只是因爲這項權利允許用戶Y.

的問題是,在角色提供,我沒有辦法接受任何上下文,我只收到用戶名。

那麼你認爲我可以做什麼?(如果它可以幫助,會員也是一個自定義會員供應商)。

回答

0

要阻止對這些特定頁面的訪問,您可以對這些操作實施RoleManagementFilter。這將只允許員工角色,管理角色的用戶訪問特定頁面。

[RequiresEmployeeRole(Route = "Account", Action = "LogOn", Order = 1)] 
Public ActionResult EmployeeSettings(){ 
    return View(); 
} 

的ActionFilter確實是基於請求的頁面要麼將其重定向到路線和操作的用戶的角色是什麼,你設定的路線=「賬戶」,行動=「登錄」或允許他們進來。

下面是ActionFilterAttribute的一部分。

public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     string[] roles = Roles.GetRolesForUser(); 
     string userrole = ""; 

     if (roles.Length > 0) 
      userrole = roles[0]; 

     if (Regex.IsMatch(userrole, Role)) 
      filterContext.HttpContext.Response.Redirect(redirectUrl(), true); 
    } 

我不知道你怎麼可能擁有的實體,如果是feasable與否,但如果你要創建的每個實體的作用,重視用戶這些角色,那麼你可以立足於行動的限制如果用戶在Roles.GetRolesForUser()中;

我發現一個MSDN文章重新操作過濾器http://msdn.microsoft.com/en-us/magazine/gg232768.aspx可能有幫助。有很多例子可以幫助你。

相關問題