Asp .Net Core 在数据库检查时隐藏布局上的菜单
创始人
2024-11-11 14:02:18
0

在Asp .Net Core中,可以使用角色和授权策略来隐藏布局上的菜单,同时与数据库进行检查。以下是一种解决方案示例:

  1. 首先,在数据库中创建一个用于存储角色和对应菜单权限的表,例如:RoleMenuPermission,包含以下字段:

    • RoleId:角色ID
    • MenuId:菜单ID
  2. 在应用程序中定义一个自定义的授权策略处理器,用于检查用户是否有权限访问菜单。创建一个名为MenuAuthorizationHandler的类,并实现IAuthorizationHandler接口,代码示例如下:

public class MenuAuthorizationHandler : AuthorizationHandler
{
    private readonly YourDbContext _dbContext;

    public MenuAuthorizationHandler(YourDbContext dbContext)
    {
        _dbContext = dbContext;
    }

    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MenuAuthorizationRequirement requirement)
    {
        var userId = context.User.GetUserId(); // 获取当前用户ID
        var userRoles = _dbContext.UserRoles.Where(ur => ur.UserId == userId).Select(ur => ur.RoleId).ToList(); // 获取当前用户所属角色

        // 获取当前菜单ID
        var menuId = requirement.MenuId;

        // 检查当前用户是否有访问菜单的权限
        if (_dbContext.RoleMenuPermission.Any(rmp => userRoles.Contains(rmp.RoleId) && rmp.MenuId == menuId))
        {
            context.Succeed(requirement); // 有权限
        }

        return Task.CompletedTask;
    }
}
  1. 定义一个自定义的授权策略要求类MenuAuthorizationRequirement,并继承IAuthorizationRequirement接口,用于指定需要访问的菜单ID,代码示例如下:
public class MenuAuthorizationRequirement : IAuthorizationRequirement
{
    public int MenuId { get; }

    public MenuAuthorizationRequirement(int menuId)
    {
        MenuId = menuId;
    }
}
  1. 注册授权策略处理器和要求类到DI容器中,在Startup.csConfigureServices方法中添加以下代码:
services.AddTransient();
services.AddAuthorization(options =>
{
    options.AddPolicy("MenuAuthorization", policy =>
    {
        policy.Requirements.Add(new MenuAuthorizationRequirement(menuId)); // 指定需要访问的菜单ID
    });
});
  1. 在布局文件中,根据菜单的权限进行显示或隐藏,代码示例如下:
@if (User.Identity.IsAuthenticated)
{
    if (await AuthorizationService.AuthorizeAsync(User, null, "MenuAuthorization"))
    {
        
    }
}

注意:请根据实际情况进行适当修改和调整,例如菜单的权限判断逻辑、菜单的显示方式等。

相关内容

热门资讯

据权威媒体报道!花花生后圈开挂... 据权威媒体报道!花花生后圈开挂(辅助)切实真的有辅助平台(有挂讲解)-哔哩哔哩1、每一步都需要思考,...
今天上午!拱趴大菠萝挂哪里,w... 今天上午!拱趴大菠萝挂哪里,wepoker修改工具,课程辅助方法(有挂技巧)-哔哩哔哩拱趴大菠萝挂哪...
据悉!九游辅助工具(辅助)竟然... 据悉!九游辅助工具(辅助)竟然是有辅助app(有挂头条)-哔哩哔哩1、实时九游辅助工具透视辅助更新:...
透视挂!xpoker怎么作必弊... 透视挂!xpoker怎么作必弊,新海贝之城万能辅助器,法门辅助技巧(有挂教程)-哔哩哔哩1、首先打开...
此事引发网友热议!微信小程序雀... 此事引发网友热议!微信小程序雀神挂件辅助(辅助)果然是真的辅助插件(详细教程)-哔哩哔哩一、微信小程...
2026版辅助挂!佛手大菠萝1... 2026版辅助挂!佛手大菠萝13道挂哪里,广西八一字牌可以破解吗,诀窍辅助方法(有挂方针)-哔哩哔哩...
现就发布提示!微信大a辅助(辅... 现就发布提示!微信大a辅助(辅助)都是真的是有辅助插件(有挂技巧)-哔哩哔哩1、每一步都需要思考,不...
2026版软件!约局吧德州真的... 2026版软件!约局吧德州真的有透视挂吗,wepoker手机版透视脚本,资料辅助方法(今日头条)-哔...
昨日!皮皮跑子辅助(辅助)一贯... 昨日!皮皮跑子辅助(辅助)一贯有挂辅助软件(有挂分析)-哔哩哔哩1、实时皮皮跑子辅助透视辅助更新:用...
2026版复盘!德州圈脚本,碰... 2026版复盘!德州圈脚本,碰胡碰胡滚筒有脚本吗,方针辅助神器(有挂工具)-哔哩哔哩1、超多福利:超...