处理User
所属的Organization
应用。一个Organization
has_and_belongs_to_many产品,但是organizations_products
表。
我希望具有特定角色的User
能够管理其Organization
的产品。在ability.rb
:
def initialize(user)
# ...snip unrelated stuff
elsif user.is_manager?
can :manage, Product, do |product|
user.organization.products.include?(product)
end
这描述了我想要做的事情,但它在产品控制器中引发了一个例外:
def index
@products = Product.accessible_by(current_ability)
end
因为acessible_by
can't be used with blocks在能力定义中。如何以与accessible_by
兼容的方式编写此功能?
答案 0 :(得分:0)
can :manage, Product, user.organization.products do |product|
user.organization.products.include?(product)
end
澄清:CanCan在版本1.6中添加了第三个参数,您可以将其理解为accessible_by使用的范围。用于评估can :manage, @a_specific_product
的块,如果您使用其中任何一个 - 范围或块 - 您应该使用两者。
另请参阅:this question,其中大部分都是此版本的副本,the docs。