Shiro框架删除操作的权限

亲爱的Joe 2018-04-03 02:46:22
SSM框架使用@PathValueable来绑定参数执行一个删除操作。如下
@RequiresRoles("company")
@RequestMapping(value="/delete/{userId}",method = RequestMethod.GET)
@ResponseBody
public BaseResponeseResult delete(@PathVariable Integer userId) {
return service.delete(userId);
}

@RequiresRoles("company")代表的是执行该操作需要company级别的权限

问题来了。

假如两个公司,A公司登陆之后通过浏览器把一个B公司的用户id写到了URL中的参数部分,
然后一访问,就会把B公司对应的账户删除了。

例如A公司的管理员登录后再浏览器地址栏输入 域名/delete/B公司某user的id

请求这样的风险要如何规避?
Shiro框架应该有这样的功能,只是我不知道怎么来弄。
求帮忙了。
...全文
771 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
另外2楼的解决方案太局限了,随着业务增长和变化这种方式可能就不再适用了,解决问题需要站在全局的角度上考虑
  • 打赏
  • 举报
回复
引用 4 楼 qq892618896 的回复:
权限分两种,访问权限和数据权限,你这个问题明显是属于数据权限,需要做一下数据权限判断


引用 5 楼 z469441432 的回复:
[quote=引用 4 楼 qq892618896 的回复:]
权限分两种,访问权限和数据权限,你这个问题明显是属于数据权限,需要做一下数据权限判断

虽然我已经解决了,不过不是你说的方法,你说的能不能给具体解释下呢?就以我这个情况为例。
因为我之前看过shiro确实可以给具体的某个资源定义权限:例如:delete:user:11 这样类似的格式去表示有删除id为11的user 的权限。
可是问题是,我不知道怎么去动态定义这种权限,毕竟user的id是多少并不固定。另外,我也不知道这样的权限形式要放在那里去验证

[/quote]
很抱歉看的有点晚,我目前知道的shiro只是在资源访问上做权限校验,并没有做数据权限校验,比如说A公司下属有user1,user2 B公司下属有user3,user4那么A公司有访问delete/user这个地址的权限,但并没有访问user3这个数据的权限,所以正常来说应该返回的是删除失败或者该账号没有权限的提示,从这上面引申出一个问题就是数据空间的问题,一个space下的数据理论上不会被另一个space所访问,具体到技术实现有很多种并不固定,具体业务具体分析。
亲爱的Joe 2018-04-09
  • 打赏
  • 举报
回复
已经解决了,不过是用shiro的session来保存用户信息,然后再次发生上面说的那个情况,我就自己写逻辑判断来执行操作的用户倒是是不是当前登录的用户
亲爱的Joe 2018-04-09
  • 打赏
  • 举报
回复
引用 4 楼 qq892618896 的回复:
权限分两种,访问权限和数据权限,你这个问题明显是属于数据权限,需要做一下数据权限判断
虽然我已经解决了,不过不是你说的方法,你说的能不能给具体解释下呢?就以我这个情况为例。 因为我之前看过shiro确实可以给具体的某个资源定义权限:例如:delete:user:11 这样类似的格式去表示有删除id为11的user 的权限。 可是问题是,我不知道怎么去动态定义这种权限,毕竟user的id是多少并不固定。另外,我也不知道这样的权限形式要放在那里去验证
  • 打赏
  • 举报
回复
权限分两种,访问权限和数据权限,你这个问题明显是属于数据权限,需要做一下数据权限判断
kx00450 2018-04-04
  • 打赏
  • 举报
回复
post 参数转码
qq_41228556 2018-04-04
  • 打赏
  • 举报
回复
你判断一下,如果不是超级管理员,做删除操作的用户所在公司与被删账号所在公司是否一致不就行了
亲爱的Joe 2018-04-04
  • 打赏
  • 举报
回复
怎么会没人知道呢,好凄凉啊

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧