阻止用户自己管理员

时间:2010-07-05 14:55:05

标签: ruby-on-rails security controller

在我的应用中,我有一个“用户”模型,其中包含许多属性,包括“has_admin_rights”。如果为true,则表示用户为admin,如果为false,则表示不是。

每个用户都有一个个人资料,包括他们的登录名,电子邮件地址,个人资料照片等。

如果我以普通用户身份登录,我可以点击名为“个人资料”的页面,我可以编辑自己的帐户,例如更新我的电子邮件地址,个人资料照片,密码,等等。我只能编辑我的帐户,而不能编辑其他帐户。

如果我以管理员身份登录,我可以再做一点:例如,我可以让另一位用户成为管理员,或者取消他们的管理员权限。

现在,只有管理员才能访问显示“make admin”复选框的视图,但我觉得仅仅限制对视图的访问是不够的。

我关注的是,因为任何用户都可以编辑自己的个人资料,有什么可以阻止用户提交自定义表单帖子,其中包含“has_admin_rights”=>“1”参数自己的帐户 - 从而授予自己管理员权限?

我在想的是,在用户控制器中,在对“has_admin_rights”字段应用任何更改之前,我需要检查以确保发出请求的用户当前是管理员 - 否则我忽略该请求完全没有变化。

4 个答案:

答案 0 :(得分:2)

  

在用户控制器中,在对“has_admin_rights”字段应用任何更改之前,我需要检查以确保发出请求的用户当前是管理员 - 否则我完全忽略该请求,并且不做任何更改。 / p>

是的,确切地说。永远不要相信客户;请记住,任何人都可以直接用Firebug或其他任何东西调整页面。

我还建议您考虑添加审计跟踪,并在每个管理员将另一个用户添加到管理员时记录某些内容。也许还会向特定组的所有管理员发送电子邮件,让他们知道已经创建了管理员(或者该权限已被撤销)。

答案 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"