如果我在Rails中设置基本的User
模型,并为其指定is_admin:boolean, default: false
属性,那么防止非管理员用户更改此内容的最佳方法是什么?
似乎应该真正进入模型的那种逻辑,但是构建它的最佳方法是什么? ActiveRecord回调函数?
我知道我可以将其添加到控制器的#update
方法中,但这似乎与MVC最佳实践相匹配。 (而且似乎不太便携。)
这里最好的方法是什么?
答案 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)
您可以阻止某人侵入您的网站以获得管理员权限。