开门见山
如角色超级管理员有权限 user,但是没有 user:insert,user:edit权限
可见源码,shiro会通过":"把用户的权限字符串split,如:user:insert,得到List<String> == [user,insert],如下图
这里的perms代表的是用户的所有权限,为经过split之后的权限,permission为当前要校验的权限,如下图
校验权限时,比如校验的是user:insert,用户拥有权限user,for循环第一层,user比对user,通过,执行i++,for循环第二层,由于getParts().getsize -1 < i 条件成立(用户权限user,split之后,只有user这个字符串),所以返回true,权限校验通过
说明了,如果用户user权限,user下的其它权限,如:user:insert,user:edit 都会拥有,如下图