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