权限验证流程逻辑存在疑惑
来源: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、超级管理员这块你要看这块的代码:
它接受一个SysUser对象作为参数,并返回一个包含菜单权限信息的Set<String>集合。
方法首先创建一个空的HashSet<String>对象perms,用于存储菜单权限信息。然后,它检查用户是否为管理员(通过调用user.isAdmin()方法)。如果是管理员,则将"::*"添加到perms集合中,表示管理员拥有所有权限。
如果用户不是管理员,则获取用户的角色列表(通过调用user.getRoles()方法)。如果角色列表不为空且包含多个角色,则遍历每个角色,并通过调用menuService.selectMenuPermsByRoleId(role.getRoleId())方法获取该角色的菜单权限。然后将这些权限添加到perms集合中。
如果角色列表只包含一个角色或为空,则直接通过调用menuService.selectMenuPermsByUserId(user.getUserId())方法获取用户的菜单权限,并将其添加到perms集合中。
最后,方法返回perms集合,其中包含了用户的所有菜单权限信息。
042024-02-04
相似问题