我正在尋找重新使用我當前定義的控制器/操作授權屬性來指定顯示菜單項的用戶訪問角色(因此用戶只能看到他們有權訪問的菜單項)。重用MVC控制器角色菜單項的顯示授權
當前顯示的菜單項和控制器/操作授權屬性角色是不同的,所以任何更改都需要在兩個地方進行更新,這可能在將來容易出錯。
我一直在尋找到自定義授權屬性,這是我到目前爲止有:
public class MyAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var isAuthorized = base.AuthorizeCore(httpContext);
if (!isAuthorized)
{
return false;
}
var routeData = httpContext.Request.RequestContext.RouteData;
string currentAction = routeData.GetRequiredString("action");
string currentController = routeData.GetRequiredString("controller");
var currentUserRoles = GetCurrentUserRoles();
// from the list of menu items, find the menu item with the current action
// and controller and check the current user's roles entitle access
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary(
new
{
controller = "Error",
action = "Unauthorised"
})
);
}
}
的MenuItems基本上是由用戶角色菜單項可用於爲前端顯示的文本標籤以及來自控制器和操作的網址。 MenuItems在部分視圖中呈現,具體取決於當前用戶是否具有顯示MenuItem所需的角色。
從我所看到的情況來看,我可能需要所有控制器操作的詳盡列表以及相關用戶角色在兩個區域中重複使用,是否有更優雅的方法來實現此目的?