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、微乐小程序...
第5分钟透视!微乐小程序黑科技... 第5分钟透视!微乐小程序黑科技,微信微乐辅助器下载(开挂)都是是真的挂(2026)小薇(辅助器软件下...
透视计算!微乐小程序免费黑科技... 透视计算!微乐小程序免费黑科技,微乐自建房辅助工具别人怎么看(透视)竟然真的有挂(哔哩哔哩)1、金币...
2分钟辅助!微乐小程序黑科技,... 2分钟辅助!微乐小程序黑科技,微乐江苏小程序游戏破解下载(开挂)真是真的有挂(2026)1、很好的工...
透视讲解!微乐小程序黑科技,微... 透视讲解!微乐小程序黑科技,微乐小程序有脚本吗(透视)原来是有挂(哔哩哔哩)1、玩家可以在微乐小程序...
五分钟辅助!微乐小程序黑科技,... 五分钟辅助!微乐小程序黑科技,微乐家乡脚本助手(开挂)竟然真的有挂(2026)1、实时微乐小程序黑科...
9分钟安装!微乐小程序免费黑科... 9分钟安装!微乐小程序免费黑科技,微乐小程序免费黑科技下载方法(开挂)好像有挂(2026)微乐小程序...
透视挂!微乐小程序黑科技,微乐... 透视挂!微乐小程序黑科技,微乐小程序黑科技辅助工具2026最新推荐(透视)切实是有挂(哔哩哔哩)1)...
第8分钟辅助!微乐小程序黑科技... 第8分钟辅助!微乐小程序黑科技,陕西微乐挖坑控制器(开挂)果然真的有挂(2026)一、微乐小程序黑科...
辅助透视!微乐小程序免费黑科技... 辅助透视!微乐小程序免费黑科技,陕西微乐小程序攻略(透视)确实真的是有挂(哔哩哔哩)1、微乐小程序免...