在我的应用中,我有一个“用户”模型,其中包含许多属性,包括“has_admin_rights”。如果为true,则表示用户为admin,如果为false,则表示不是。
每个用户都有一个个人资料,包括他们的登录名,电子邮件地址,个人资料照片等。
如果我以普通用户身份登录,我可以点击名为“个人资料”的页面,我可以编辑自己的帐户,例如更新我的电子邮件地址,个人资料照片,密码,等等。我只能编辑我的帐户,而不能编辑其他帐户。
如果我以管理员身份登录,我可以再做一点:例如,我可以让另一位用户成为管理员,或者取消他们的管理员权限。
现在,只有管理员才能访问显示“make admin”复选框的视图,但我觉得仅仅限制对视图的访问是不够的。
我关注的是,因为任何用户都可以编辑自己的个人资料,有什么可以阻止用户提交自定义表单帖子,其中包含“has_admin_rights”=>“1”参数自己的帐户 - 从而授予自己管理员权限?
我在想的是,在用户控制器中,在对“has_admin_rights”字段应用任何更改之前,我需要检查以确保发出请求的用户当前是管理员 - 否则我忽略该请求完全没有变化。
答案 0 :(得分:2)
是的,确切地说。永远不要相信客户;请记住,任何人都可以直接用Firebug或其他任何东西调整页面。在用户控制器中,在对“has_admin_rights”字段应用任何更改之前,我需要检查以确保发出请求的用户当前是管理员 - 否则我完全忽略该请求,并且不做任何更改。 / p>
我还建议您考虑添加审计跟踪,并在每个管理员将另一个用户添加到管理员时记录某些内容。也许还会向特定组的所有管理员发送电子邮件,让他们知道已经创建了管理员(或者该权限已被撤销)。
答案 1 :(得分:1)
attr_protected
非常有用
class User < ActiveRecord::Base
attr_protected :is_admin
end
答案 2 :(得分:0)
在用户模型中添加执行此验证的before_save。
答案 3 :(得分:0)
Ue attr_accessible可以通过质量分配设置的白色模型属性列表
class User < ActiveRecord::Base
attr_accessible :has_admin_rights
end
&安培;在控制器
@user.has_admin_rights = current_user.is_admin? "1" : "0"