权限验证流程逻辑存在疑惑

来源:11-7 、saas系统注册登录流程、数据库隔离及系统页面优化

慕标4138913

2023-10-24

Yerik老师好,我对于一下几个问题有点疑惑
①为什么注册/登录时必须输入一个超级管理员账号?
②当前系统权限设计采用菜单权限和数据权限,菜单权限是基于角色的。我如何创建一个普通用户去debug权限源码?
③我去掉超级管理员不用校验权限代码,通过List perms = menuMapper.selectMenuPermsByUserId(userId);查出perms 为空,而正常情况下超级管理员会有这条代码perms.add("::*"); 这是为什么呢?
图片描述
④我对权限校验的逻辑流程存在疑惑,希望老师能讲一讲

写回答

1回答

Yerik老师

2023-10-25

1、超级管理员是用来管理租户的

1、超级管理员是管理租户的

2、你按照你需要的角色登录,然后后端debug就是这个角色的

3、这段代码的意思是这样的:调用menuMapper对象的selectMenuPermsByUserId方法,传入userId参数,获取一个包含菜单权限的字符串列表perms。

创建一个空的HashSet<String>对象permsSet,用于存储去重后的菜单权限。

遍历perms列表中的每个字符串perm。

判断perm是否非空,如果非空,则执行以下操作: 

a. 使用trim()方法去除perm两端的空白字符。 b. 使用split(",")方法将perm按逗号分隔成一个字符串数组。 c. 将字符串数组转换为列表,并使用addAll()方法将其添加到permsSet中。

返回permsSet作为方法的结果。

4、超级管理员这块你要看这块的代码:

https://img.mukewang.com/szimg/6538788f09e2e3d808470603.jpg

它接受一个SysUser对象作为参数,并返回一个包含菜单权限信息的Set<String>集合。

方法首先创建一个空的HashSet<String>对象perms,用于存储菜单权限信息。然后,它检查用户是否为管理员(通过调用user.isAdmin()方法)。如果是管理员,则将"::*"添加到perms集合中,表示管理员拥有所有权限。

如果用户不是管理员,则获取用户的角色列表(通过调用user.getRoles()方法)。如果角色列表不为空且包含多个角色,则遍历每个角色,并通过调用menuService.selectMenuPermsByRoleId(role.getRoleId())方法获取该角色的菜单权限。然后将这些权限添加到perms集合中。

如果角色列表只包含一个角色或为空,则直接通过调用menuService.selectMenuPermsByUserId(user.getUserId())方法获取用户的菜单权限,并将其添加到perms集合中。

最后,方法返回perms集合,其中包含了用户的所有菜单权限信息。

0
4
张三少
回复
慕标4138913
你的重新写一个注册,这里的注册就像使用超管登录后创建用户一样。
2024-02-04
共4条回复

SpringBoot+Vue3打造企业级ERP+CRM一体化SaaS系统

SpringBoot+Vue3打造企业级ERP+CRM一体化SaaS系统

287 学习 · 84 问题

查看课程