0

我有这种情况:

1 个用户 - N 个项目

1 个项目 - N 个任务

1 个项目 - N 评论

当用户通过身份验证时,他可以执行以下操作:

/api/tasks/1

删除他的任务,但是当他在做 /api/tasks/2 时,他删除了其他人的任务

/api/comments/1 

得到他的评论,但是当他在做 /api/comments/2 时,他阅读了其他人的任务

如何拦截用户操作(操作 URI)并以一般方式检查是否允许用户删除此任务。

Task 和 Comment 对 userId 一无所知,那么如何禁止用户删除其他人的数据呢?

我不是在谈论用户和角色场景。我说的是操纵 URI 以删除属于其他人的资源。

更新以回答@A Khudairy 的问题

1)电子邮件+密码发送到api。

2) Api 使用用户令牌返回用户。

3)然后随着每个请求将令牌发送到api,(以便我知道哪个用户在做什么并在后端处理它。)

4

2 回答 2

0

好吧,我个人不会使用 URI 来解决这个问题(我认为没有一种安全的方法可以实现这一点)。我将实现一个自定义授权过滤器检查这个如果您不熟悉它,请查看此链接以获取有关如何执行此操作的帮助。

在过滤器中,我将使用令牌获取用户 ID,并使用路由数据来查看用户尝试执行的过程(以及任务或评论的 ID),然后根据此决定用户是否可以继续。

过滤器可以注册在控制器类的顶部,或者只是在一些操作方法上,或者如果需要,从 global.asax 到所有操作。

于 2014-01-16T12:12:34.983 回答
0

在我看来,您要么必须将 UserId 添加到 Comment 和 Task 实体中以便您可以轻松检查,要么您需要确保 Task 或 Comment 属于用户也可以访问的项目?

除非我误解了你的问题?

如果 Task 或 Comment 没有 UserId,您将如何区分自己的评论和任务与其他人?

于 2014-01-16T09:45:44.957 回答