用户模型、attr_accessible和admin



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

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

您需要在内部处理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

然后使用实例方法设置adminship。。。

# 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

您将admin保留为不可访问属性是非常正确的,这只是禁用了通过批量分配进行设置。你仍然可以通过单独设置种子来设置admin。示例:

user = User.new(:name => 'joe') ...
user.admin = true
user.save

相关内容

  • 没有找到相关文章

最新更新