若依框架角色菜单权限

1.背景

若依原生角色框架为:

不同用户属于不同角色,不同角色可以访问不同的模块,

如:角色a可以访问项目管理和支付页面,角色B可以访问订单页面,

目前若依系统只能实现不同角色访问不同页面

2.需求

现在要求实现角色a和角色b都能访问项目管理页面,但是只能看到自己的项目。超级管理员可以查看所有项目

3.分析

目前的若依原生代码其实就是查看所有项目,即对应修改后的超级管理员的权限查看范围。需要一个标识符来判断角色类型

4.实现思路

现在用户登录后,访问项目管理页面,查看该用户所属角色权限范围内的菜单页面,

java 复制代码
Set<String> permissions = SecurityUtils.getLoginUser().getPermissions();

具体实现如下:

取出该用户的user ID,

通过sys-user-role表,查询到该用户所对应的角色。

再通过查询 sys -role-menu表,查询到该角色权限内的可以查看的菜单页面。

取出该用户可以查看的所有菜单页面,然后进行判断。

菜单页面已事先建立一个可以查看全部页面的标识菜单。

开始判断,若该用户权限集合为空 或者不包含可以查看全部页面的标识。则取出userID,将其添加为查询条件进行list查询。

java 复制代码
if(StringUtils.isEmpty(permissions) || !permissions.contains("system:project:all")){
            projectManage.setCreateBy(SecurityUtils.getLoginUser().getUserId().toString());
        }
        /*
情况 1:权限集合为空(A = 空,不管 B 是什么)
比如:用户是新注册的,还没分配任何权限。
满足StringUtils.isEmpty(permissions),整个 if 条件成立 → 执行里面的代码(只能看自己创建的项目)。
情况 2:权限集合不为空,但不包含 "查看所有项目" 权限(A = 非空,B = 不包含)
比如:用户有 "创建项目""编辑自己的项目" 等权限,但没有 "查看所有项目" 权限。
满足!permissions.contains(...),整个 if 条件成立 → 执行里面的代码(只能看自己创建的项目)。
情况 3:权限集合不为空,且包含 "查看所有项目" 权限(A = 非空,B = 包含)
比如:管理员,有 "查看所有项目" 的权限。
两个条件都不满足(既不是空权限,也包含目标权限) → if 条件不成立,不执行里面的代码(可以查看所有项目)。
         */

否则可以查看所有的项目

java 复制代码
List<ProjectManage> list = projectManageService.selectProjectList(projectManage);

注意

查看全部页面++system:project:all++ ,只作为标识,而不作为查询条件只是一个过滤条件。不参与到最后的SQL语句中

这样就实现了不同的用户可以查询自己对应的项目。

5.完整代码

java 复制代码
/**
     * 获取项目列表
     */
    @PreAuthorize("@ss.hasPermi('system:project:list')")
    @GetMapping("/list")
    public TableDataInfo list(ProjectManage projectManage)
    {
        startPage();
        //有"查看所有权限"的,条件不变;没有"查看所有权限"的,自动增加条件:创建人=当前登录人 wxx 20250723 start
        Set<String> permissions = SecurityUtils.getLoginUser().getPermissions();
        if(StringUtils.isEmpty(permissions) || !permissions.contains("system:project:all")){
            projectManage.setCreateBy(SecurityUtils.getLoginUser().getUserId().toString());
        }
        /*
情况 1:权限集合为空(A = 空,不管 B 是什么)
比如:用户是新注册的,还没分配任何权限。
满足StringUtils.isEmpty(permissions),整个 if 条件成立 → 执行里面的代码(只能看自己创建的项目)。
情况 2:权限集合不为空,但不包含 "查看所有项目" 权限(A = 非空,B = 不包含)
比如:用户有 "创建项目""编辑自己的项目" 等权限,但没有 "查看所有项目" 权限。
满足!permissions.contains(...),整个 if 条件成立 → 执行里面的代码(只能看自己创建的项目)。
情况 3:权限集合不为空,且包含 "查看所有项目" 权限(A = 非空,B = 包含)
比如:管理员,有 "查看所有项目" 的权限。
两个条件都不满足(既不是空权限,也包含目标权限) → if 条件不成立,不执行里面的代码(可以查看所有项目)。
         */

        List<ProjectManage> list = projectManageService.selectProjectList(projectManage);
        return getDataTable(list);
    }

欢迎批评指正!

相关推荐
执子手 吹散苍茫茫烟波21 分钟前
leetcode415. 字符串相加
java·leetcode·字符串
小韩博27 分钟前
网络安全(Java语言)脚本 汇总(二)
java·安全·web安全
萤丰信息33 分钟前
技术赋能安全:智慧工地构建城市建设新防线
java·大数据·开发语言·人工智能·智慧城市·智慧工地
带刺的坐椅1 小时前
Java MCP 的鉴权?好简单的啦
java·鉴权·mcp·solon-ai
Pocker_Spades_A1 小时前
飞算JavaAI家庭记账系统:从收支记录到财务分析的全流程管理方案
java·开发语言
33255_40857_280591 小时前
掌握分页艺术:MyBatis与MyBatis-Plus实战指南(10年Java亲授)
java·mybatis
Ashlee_code1 小时前
香港券商智能櫃台系統技術解決方案——融合跨境清算與AI風控,助力券商把握滬港雙市爆發機遇**
java·科技·金融·重构·架构·系统架构·php
蚰蜒螟1 小时前
Spring 和 Lettuce 源码分析 Redis 节点状态检查与失败重连的工作原理
java·redis·spring
小张快跑。2 小时前
Tomcat下载、安装及配置详细教程
java·服务器·tomcat
神仙别闹2 小时前
基于 JSP+Mysql实现MVC房屋租赁系统
java·mysql·mvc