Shiro中的用户等级逻辑
Shiro的代码层逻辑处理中一般会对不同的用户角色进行分级,在分级的过程中
- 大于等于某个等级
- 小于等于某个等级
- 小于某个等级
- 大于某个等级
是完全不同的四个概念,就如同变成的数组操作一样,一定要对边界的进行周详的考虑
Shiro中的本人验证: 平级越权
平级越权是一种常见的错误,假设存在一个需求:
- 只能修改比自己等级低的用户的密码
如何进行判断?如果采用这种逻辑
1 | if (用户等级 < 当前用户等级) { |
会发现判断条件里是不能修改自己的密码的,因为 自己的用户等级 == 当前用户等级 如果采用
1 | if (用户等级 <= 当前用户等级) { |
貌似可以满足需求,但是会引起一个安全问题就是: 平级越权 因为按照设计逻辑,虽然可以修改自己的密码,但是不能修改和自己同等级用户的密码,所以说以上逻辑显然不对,正确的授权判断应该是
1 | if (用户等级 < 当前用户等级 || 用户是本人 ) { |