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