1

我創建了一個管理區域。我想在訪問管理員/主頁/索引之前,您必須登錄管理員/帳戶/登錄。所以,我設置了HomeController的授權。因爲我使用的是Asp.net Identity,所以爲了能夠轉到Admin/Account/Login,我在StartUp.Auth.cs文件中設置LoginPath = new PathString(「/ Admin/Account/Login」)。如何在MVC5中設置授權區域

但現在,如果我設置爲授權控制器上的客戶端,它會被重定向到管理員/帳號/登錄

如何分離2路在一個項目授權。

非常感謝您的幫助。

PS:我也試試這個,但它仍然對我不起作用 MVC4 areas and forms authentication

回答

1

我不知道我完全理解你正在嘗試做的,但我想你想將用戶重定向到不同的索引頁面一旦登錄? 如果是這樣,你有幾種選擇: 假設你正在使用的標識模型運與MVC5:

1 - 在您的的AccountController - 登錄行動(HttpPost)

VAR的結果=等待SignInManager.PasswordSignInAsync .... 添加類似的東西:

  • var user = await UserManager.FindAsync(model.Email,model.Password);
  • returnUrl = UserManager.IsInRole(user.Id,「Admin」)? 「/ Admin/Home」: returnUrl;

2 - 或者你可以創建一個客戶ActionFilterAttribute像這樣的(簡化演示目的,但尚未工作示例):

public class RedirectLoginFilter:ActionFilterAttribute 
{ 
public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     // First check if authentication succeed and user authenticated:    

     if (filterContext.HttpContext.User.Identity.IsAuthenticated) 
     {     
      bool IsAdmin = filterContext.HttpContext.User.IsInRole("Admin"); 

      //Then check for user role(s) and assign view accordingly, don't forget the 
      //[Authorize(Roles = "YourRoleHere")] on your controller/action 
      if (IsAdmin) 
      { 
       filterContext.Result = new RedirectToRouteResult(new System.Web.Routing.RouteValueDictionary 
       (new 
       { 
        area = "Admin", 
        controller = "Home", 
        action = "Index" 
       })); 
      } 
      else 
      { 
       filterContext.Result = new RedirectToRouteResult(new System.Web.Routing.RouteValueDictionary 
       (new 
       { 
        area = "", 
        controller = "Home", 
        action = "Index" 
       })); 
      } 
     } 

     base.OnActionExecuted(filterContext); 
    } 

現在在默認RETURNURL控制器操作的所有非標識的用戶,即:首頁/索引加入您的自定義過濾器行動屬性:

public class HomeController : Controller 
{ 

    [RedirectLoginFilter] 
    public ActionResult Index() 
    {       
     return View();    
    } 

請記住,使用最後一個解決方案時,您每次嘗試使用管理角色訪問您的Home/Index方法時,您都將被重定向到管理索引頁面。

+0

我會試試你的解釋。非常感謝:D –

1

如果用戶處於特定角色並進行身份驗證,並且選擇顯示/隱藏這些特定區域(如果它們不是),則可以隨時在導航區域中進行檢查。首先,您需要將[授權]裝飾器放在任何必要的控制器上,然後您可以在您的cshtml文件中執行此操作,以確保只有管理員可以看到管理區域。

@if (User.Identity.IsAuthenticated) 
      { 
       if (User.IsInRole("Admin")) 
       { 
       <li>@Html.ActionLink("Admin", "Admin", "Account")</li>    
       } 
      }