我需要在用户上添加过滤器。仅当用户属于同一分支时,用户才能看到其他用户。一个用户可以属于多个分支。
我正在使用下面的块定义能力。但在提到文档并面对错误之后,我知道index
方法不适合用块定义能力。
#This code is part of initialisation method of ability.rb
can :index, User do |curr_user|
#check if user belongs to same branch
!curr_user.branch_ids.index(branch_id).nil?
end
这是用户控制器的索引方法
def index
authorize! :index, User
@users = User.where(params[:user]).accessible_by(current_ability, :index)
renders :obj =>@users
end
用什么替代方法来定义实现此逻辑的能力来代替用块定义能力?
答案 0 :(得分:1)
accessible_by
就像AR的where
一样......
您应该使用条件哈希而不是块来定义您的能力 见Defining-Abilities
像...一样的东西。
def initialize(user)
conditions = branch_id: user.branch_id
can :read, User, conditions
end
我建议你先在irb console
中加注正确conditions
user = User.first
User.where(branch_id: user.branch_id)
然后你可能想要一个测试