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"))
    {
        
    }
}

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

相关内容

热门资讯

玩家爆料"宁波同乐游... 玩家爆料"宁波同乐游辅助下载"开挂(透视)辅助透视有挂神器-详细教程《详细加薇136704302咨询...
四分钟辅助“小闲辅助器”开挂(... 小闲辅助器开挂教程视频分享装挂详细步骤在当今的网络游戏中,小闲辅助器作为一种经典的娱乐方式,吸引了无...
解密关于"约局吧德州... 约局吧德州真的存在透视吗 无需打开直接搜索微信:136704302本司针对手游进行,选择我们的四大理...
七分钟辅助“爱趣玩辅助”开挂(... 七分钟辅助“爱趣玩辅助”开挂(脚本)辅助脚本教你攻略-了解有挂您好:爱趣玩辅助这款游戏可以开挂,确实...
玩家爆料"温州茶苑手... 玩家爆料"温州茶苑手机版辅助器"开挂(神器)辅助神器有挂总结-微扑克教程 >>您好:软件加薇1367...
开挂辅助“789大菠萝如何手气... >>您好:789大菠萝如何手气顺确实是有挂的,很多玩家在这款789大菠萝如何手气顺游戏中打牌都会发现...
透视好牌"新西部微信... 透视好牌"新西部微信辅助"开挂(透视)辅助透视真的有挂-2026新版 了解更多开挂安装加(13670...
一分钟辅助“佛手在线13道辅助... 一分钟辅助“佛手在线13道辅助”开挂(工具)辅助工具新2026版-有挂技巧您好:佛手在线13道辅助这...
实测分享"如何下载科... 实测分享"如何下载科乐填大坑辅助器"开挂(软件)辅助软件的确有挂-透牌教程;亲,如何下载科乐填大坑辅...
七分钟辅助“微乐家乡游戏攻略”... 七分钟辅助“微乐家乡游戏攻略”开挂(透视)辅助透视切实教程-有挂讲解>>您好:软件加薇1367043...