0

我正在构建一个简单的博客风格的应用程序。我真的只需要管理员和非管理员用户,所以似乎在用户模型中有一个名为 admin (boolean) 的简单列就足够了。

我现在正在使用 Devise 进行授权,并且添加了管理列。我正在尝试在 中设置我的默认管理员用户(我自己)seeds.rb,但是false除非我将 admin 列添加到attr_accessible. 然而,这似乎是一个安全问题,我通常不希望管理员用户能够被创建,除非由另一个管理员创建。执行此操作的正确且安全的方法是什么?

4

2 回答 2

2

您想在admin内部处理设置布尔值。不要将其暴露在批量分配中。

让您的用户模型自动将第一个用户(您)默认为管理员。为此使用一种before_create方法...

# models/user.rb
before_create :make_first_user_an_admin

def make_first_user_an_admin
  self.admin = self.class.count == 0 # sets true if no users exist, false otherwise
end

然后使用实例方法设置管理...

# models/user.rb
def toggle_admin
  self.admin = !self.admin
  save
end

在你的控制器中保护这个方法......

# controllers/users_controller.rb
def change_adminship
  if current_user.admin
    @user.toggle_admin
  else
    raise "Can't do that."
  end
end
于 2012-02-14T02:09:10.077 回答
0

您将 admin 设置为不可访问是非常正确的,这只是禁用了通过批量分配进行设置。您仍然可以通过单独设置来在种子中设置管理员。例子:

user = User.new(:name => 'joe') ...
user.admin = true
user.save
于 2012-02-14T03:11:41.033 回答