如何确保Rails中的用户只能更新/插入/删除他/她在数据库中的记录

时间:2011-10-30 15:04:34

标签: database ruby-on-rails-3 authentication entitlements

很抱歉,如果这是一个基本问题,但我刚刚开始考虑我是否一直这样做。通常当用户尝试更新数据库时,我只需使用他/她的用户名作为用户表中的键,然后将所有操作基于该用户表。然而,我刚刚意识到一个狡猾的用户可能能够使用另一个用户名来提交查询,从而绕过这种强制执行权利的弱形式。所以我的问题是如何阻止用户针对不同用户ID下的数据库提交破坏性操作?

1 个答案:

答案 0 :(得分:2)

您应该在会话中存储当前用户的ID,这不容易操作。

我通常通过User对象上的关系来引用对象:

    current_user.fragile_records.find(params[:id]).destroy

这是一种可读且简单的进行所有权测试的方式。

http://guides.rubyonrails.org/security.html对这个主题的阅读非常好。

Rails中有maintaining user identity (authentication)ensuring user has clearance for an action (authorization)的大量现成解决方案。