请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

正在回答 回答被采纳积分+3

插入代码

1回答

Yerik老师 2023-10-25 10:09:16

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://img1.sycdn.imooc.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 回复 有任何疑惑可以回复我~
  • 提问者 慕标4138913 #1
    感谢老师的耐心回复,上面仍然有些疑惑
    对于②,注册时需要输入【租户ID】【超级管理员账号】【密码】等,系统只能注册管理员吗?如何注册一个租户而不是管理员?我尝试输入【normal1】【test】【密码】,但在后端校验权限时发现是管理员拥有所有权限
    回复 有任何疑惑可以回复我~ 2023-10-25 13:33:12
  • Yerik老师 回复 提问者 慕标4138913 #2
    超级管理员注册一个就可以了,完了需要按照课程中执行sql,如果正常注册,注册的就是普通租户,租户id用户和密码按照注册的输入登录即可
    回复 有任何疑惑可以回复我~ 2023-10-25 14:17:06
  • 提问者 慕标4138913 回复 Yerik老师 #3
    呜呜呜老师没看明白,按照课程中执行sql是啥意思呢?git拉的所有sql我都执行过。现在我只在initDatabase()中找到给用户授权的GRANT代码。所以我还是没明白【超级管理员注册一个就可以了】这句话的意思,似乎我无论怎样注册一定是超级管理员
    回复 有任何疑惑可以回复我~ 2023-10-25 17:54:01

相似问题

登录后可查看更多问答,登录/注册

问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信