通过cancan能力限制awesome_nested_set中的孩子

时间:2013-11-27 19:28:00

标签: ruby-on-rails cancan

我有一个充当嵌套集(树)的模型,如下所示:

class Position < ActiveRecord::Base
  attr_accessible :parent_id
  acts_as_nested_set  

  belongs_to :person
  belongs_to :parent, :class_name => 'Position', :foreign_key => :parent_id
  has_many :children, :class_name => 'Position', :foreign_key => :parent_id
end

我的ability.rb文件包含:

can :read, Position, :id => #a list of position ids

ID列表将根据对此情况不重要的其他设置而改变。

我的问题是,如何让@ position.children只返回能力授权的职位?

1 个答案:

答案 0 :(得分:0)

听起来你想要一个lambda中has_many的条件,所以它在运行时进行评估......类似于:

has_many :children, :class_name => 'Position', :foreign_key => :parent_id, :conditions => lambda {|child| can? :read child }

我没有测试过这个(很明显),但是这会让你更接近。

要在模型中获得can?,请参阅:Access CanCan's `can?` method from a model