gpt4 book ai didi

c# - 重用 MVC Controller 角色授权以显示菜单项

转载 作者:太空狗 更新时间:2023-10-29 21:50:36 25 4
gpt4 key购买 nike

我希望重用我当前定义的 Controller/Action Authorize 属性,这些属性指定用于显示菜单项的用户访问角色(因此用户只能看到他们有权访问的菜单项)。

目前菜单项的显示和controller/action authorize attribute角色是不同的,所以任何更改都需要在两个地方更新,以后可能会出错。

我一直在研究自定义授权属性,这是我目前所拥有的:

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 基本上由菜单项可用的用户角色、用于前端显示的文本标签以及来自 Controller 和操作的 url 组成。 MenuItem 以局部 View 呈现,具体取决于当前用户是否具有显示 MenuItem 所需的角色。

据我所知,我可能需要一个包含所有 Controller 操作和相关用户角色的详尽列表,以便在这两个区域中重复使用,是否有更优雅的方法来实现这一点?

最佳答案

经过进一步研究,我偶然发现了 AuthorizedActionLink nuget 包。本质上,这是一个基于 ActionLink 的 Html Helper,它只会在用户有权访问目标 Controller 操作时显示链接(请参阅 https://authorizedactionlink.codeplex.com/)。

那么就不要使用 @Html.ActionLink() ,我只是使用 @Html.AuthorizedActionLink()并且菜单是根据在 Controller /操作级别指定的用户权限构建的:)。

还有@Html.ActionIsAccessibleToUser(actionName, controllerName)所以链接周围的标记,例如 <li>可以省略。

关于c# - 重用 MVC Controller 角色授权以显示菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18061582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com