我有这种情况:
1个用户 - N个项目
1个项目 - N任务
1个项目 - N评论
当用户通过身份验证时,他可以执行以下操作:
/api/tasks/1
删除他的任务,但当他正在执行/ api / tasks / 2时,他删除了其他人的任务
/api/comments/1
得到他的评论,但当他正在做/ api / comments / 2时,他读了别人的任务
如何拦截用户操作(操纵URI)并以一般方式检查是否允许用户删除此任务。
任务和评论对userId一无所知,那么如何禁止用户删除其他人的数据呢?
我不是在谈论用户和角色方案。 我在谈论操纵URI来删除属于他人的资源。
更新回答@A Khudairy的问题
1)电子邮件+密码被发送到api。
2)Api使用用户令牌返回用户。
3)然后每次请求都将令牌发送到api,(以便我知道哪个用户正在做什么并在后端处理它。)
答案 0 :(得分:0)
听起来像你要么必须将UserId添加到Comment和Task实体,以便您可以轻松检查,或者您将需要确保Task或Comment属于用户具有的项目访问呢?
除非我误解你的问题?
如果任务或评论没有UserId,您如何区分自己的评论和任务以及其他人?
答案 1 :(得分:0)
我不会亲自使用URI解决这个问题(我认为没有一种安全的方法可以实现这一点)。我将实施自定义授权过滤器如果您不熟悉,请查看此link以获取有关如何执行此操作的帮助。
在过滤器中,我将使用令牌获取用户ID,并使用路由数据来查看用户尝试执行的过程(以及任务或注释的ID),然后决定用户是否可以继续在那。
过滤器可以在控制器类之上注册,或者仅在某些操作方法上注册,或者从global.asax注册到所有操作(如果需要)。