2016-07-25 141 views
1

我有一個MVC 5 Web應用程序通過Windows身份驗證來驗證用戶。我的目標是根據他們的Windows Authenticatied用戶名實現自定義角色。我已經看到了解釋這一點的標準,但是他們在用戶角色的設計上構建了他們的應用程序,而不是Windows autnetication。基於Windows身份驗證憑據的MVC自定義角色

我的問題是,我如何添加基於Windows認證帳戶的自定義角色?

+0

您是否嘗試過使用的DirectorySearcher對象來查詢用戶的組? – wertzui

+0

@wertzui - 我還沒有嘗試使用DirectorySeearcher對象,但它聽起來像這不是我正在尋找。我想創建我自己的自定義角色/組,這些角色/組不會在其他地方找到。角色/組將位於我自己的數據庫中 – GRU119

回答

0

一種方法ID,以自定義過濾器添加到受限制的控制器,以驗證訪問:

[HasPermission(EnumSecuredFunctionality.ACCOUNTS)] 
public class Account : Controller 
{ 

} 

內,您的自定義過濾器,您可以處理您的權限:

public class HasPermission : ActionFilterAttribute 
{ 
    public EnumSecuredFunctionality[] Actions { get; set; } 

    public HasPermission(params EnumSecuredFunctionality[] actions) //For example you can pass secured functionalities to restrict 
    { 
     Actions = actions; 
    } 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     BaseController controller = (BaseController)filterContext.Controller; 

     UserAuthData userAuthData = (UserAuthData)controller.ViewBag.UserAuthData; 

     if (!controller.UserIsAuthenticated || !controller.ValidatePermission(userAuthData.ShopSeller.LoginName.ToString(), Actions[0])) 
     { 
      //REDIRECT 
      RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary(); 
      redirectTargetDictionary.Add("action", "ShowMessage"); 
      redirectTargetDictionary.Add("controller", "Error"); 
      redirectTargetDictionary.Add("message", "Role " + EnumToString.EnumRoleToString(userAuthData.ShopSeller.EnumRole) + " No permissions"); 

      filterContext.Result = new RedirectToRouteResult(redirectTargetDictionary); 
     } 
    } 
}