2014-04-24 48 views
1

我在我的項目中創建一個控制器。在MVC4中檢查控制器中的授權(角色)

  [Authorize(Roles = "Admin")] 
     private StudentRepositor obj = new StudentRepositor(); 
     public ActionResult Index() 
     { 

      var model = obj.GetStudentlist(); 
      foreach (var stu in model) 
      { 
       stu.State = (stu.State == "1") ? "فعال" : "غیرفعال "; 
      } 
      return View(model); 
     } 

我想檢查我的控制器內部的權限,而不是外部。

例如一些事情是這樣的:

public ActionResult Index() 
      { 

       if(Role=admin) return view2 
       if(role=teacher) return view1 
      } 

我可以做這樣的事情!

問候

+0

你需要使用自定義授權attribue:HTTP://計算器。 com/questions/21958304/verify-user-permission-on-action-filter-or-authroize-filter/22535997 –

+0

您可以根據角色返回視圖或操作 –

回答

5

您應該能夠使用User.IsInRole()

public ActionResult Index() 
     { 

      if(User.IsInRole("admin")) 
      { 
       //Return View 
      } 
      else if(User.IsInRole("teacher")) 
      { 
       //Return View 
      } 
      else 
      { 
       //Return View 
      } 
     } 
+0

謝謝Tobias – user3527150

+0

如何在視圖中執行此操作? IsInRole方法沒有被識別。在控制器中,一切正常。 –

0

我建議你創建自定義AuthorizationAttribute,這樣的事情。

public class AuthorizationAttribute : FilterAttribute, IAuthorizationFilter 
    { 
     private readonly Type _userType; 

     public AuthorizationAttribute() 
     { 
     } 

     public AuthorizationAttribute(Type userType) 
     { 
      _userType = userType; 
     } 

     public void OnAuthorization(AuthorizationContext filterContext) 
     { 
      var currentHttpContext = filterContext.RequestContext.HttpContext; 
      if (!currentHttpContext.User.Identity.IsAuthenticated) 
      { 
       //Redirect 
      } 

      if (_userType != null) 
      { 
       var identity = filterContext.RequestContext.HttpContext.User.Identity.Name; 
       //Get type for identity 

       if(_userType != identityType) 
       { 
        //Redirect 
       } 

      } 
     } 
    } 

之後,你可以使用它像這樣:

[Authorization(typeof(Admin))] 
public ActionResult Create() 
{}