如何只允许管理员设置管理员权限?

时间:2015-10-14 22:33:24

标签: ruby-on-rails security ruby-on-rails-4 authentication activerecord

如果我在Rails中设置基本的User模型,并为其指定is_admin:boolean, default: false属性,那么防止非管理员用户更改此内容的最佳方法是什么?

似乎应该真正进入模型的那种逻辑,但是构建它的最佳方法是什么? ActiveRecord回调函数?

我知道我可以将其添加到控制器的#update方法中,但这似乎与MVC最佳实践相匹配。 (而且似乎不太便携。)

这里最好的方法是什么?

3 个答案:

答案 0 :(得分:1)

拒绝使用重定向进行访问是一个完美的控制器工作,所以在私有的before_filter方法中这样做就足够了,并且在我看来是合理的。

答案 1 :(得分:1)

为什么你说逻辑应该进入模型?

这取决于您的实施。如果逻辑依赖于current_user(即当前管理员也可以将另一个用户设置为管理员),那么逻辑应该进入控制器。由于您将问题标记为Rails 4,因此逻辑将进入控制器中允许的参数:

def user_params
  if current_user.is_admin
    params.require(:user).permit(...your attributes here with is_admin...)
  else
    params.require(:user).permit(...your attributes here without is_admin...)
  end
end

答案 2 :(得分:1)

我只会在控制台中设置管理员权限:

a = User.find_by(email: "user@example.com")
a.toggle!(:admin)

您可以阻止某人侵入您的网站以获得管理员权限。