【发布时间】:2026-01-07 20:55:01
【问题描述】:
我有一个关于 Rails 安全性的问题。假设我们有User 模型,它有许多用于角色的布尔值,例如admin、director 等。
管理员肯定希望在表单上编辑这些值,因此我们希望使用 attr_accessible 让管理员用户执行此操作。
当然,其他用户也可以编辑他们的用户模型 - 编辑他们的个人资料,或者当他们自己邀请/添加新用户到系统时。在导演的情况下,我们实际上希望他们设置比导演“小”的角色,但我们不希望他能够设置director 或admin
既然我们暴露了这些修改用户的控制器,在这种情况下attr_accessible不会允许设置director和admin吗?这听起来像是一个很大的安全漏洞。
那么限制访问的最佳方式是什么?
设置每个参数,一次一个?
在创建/更新操作上设置
admin = false和director = false?最简单的解决方案,但在控制器中使用它有点讨厌。使用 if 语句查看该用户角色是否可以编辑这些属性并允许它?
使用 Rails 回调?例如
before_validation或before_save?其他声明性解决方案?
谢谢
【问题讨论】:
标签: ruby-on-rails ruby security parameters attr-accessible