使用:attr_accessible基于角色的授权
-
16-09-2019 - |
题
在我的网上商店,允许用户改变他们的订单(例如,他们的帐单地址)的某些属性,但不是别人(例如,发起IP地址)。管理员,在另一方面,被允许修改的所有的顺序的属性。
考虑,这一点,我怎么能使用:attr_accessible
妥善保护我的订单模式?或将我不得不使用它来标记访问的所有属性,管理员可以修改和使用这些控制器动作Order.update_attributes(params[:order])
普通用户可以访问不要?
解决方案
一般来说,attr_accessible是不是你正在寻找和Rails不附带内置在任何工具你想要做什么。
如果您想对谁可以在模型更新特定属性的细粒度控制,你可以这样做:
class Order < ActiveRecord::Base
def update_attributes_as_user(values, user)
values.each do |attribute, value|
# Update the attribute if the user is allowed to
@order.send("#{attribute}=", value) if user.can_modify?(attribute)
end
save
end
end
然后你就可以改变你的Order.update_attributes(params[:order])
到Order.update_attributes_as_user(params[:order], current_user)
并假设你实现User#can_modify?
方法返回正确的情况下真实的,它应该工作。
其他提示
我有同样的问题,现在我用这种宝石 http://github.com/dmitry/ attr_accessible_block
可以很容易和在某些生产网站使用。
是的,你就必须修改的操作,因此权限的操作中进行检查。主叫Order#update_attributes
不会为广大用户工作。
我无法的rember基于角色的授权插件,它会让你正在寻找的东西。这是因为这些插件混入到控制器,而不是模型。他们还需要混入到ActiveRecord::Base
检查attr_accesible
等。
不隶属于 StackOverflow