Ruby on rails 4 使用cancan限制根据角色列出对象
以我的能力,我有Ruby on rails 4 使用cancan限制根据角色列出对象,ruby-on-rails-4,devise,cancan,Ruby On Rails 4,Devise,Cancan,以我的能力,我有 user ||= User.new if user.has_role? :admin can :manage, :all elsif user.has_role? :collaborator can :manage, Task, :user_id => user.id else can :read, Task, :user_id => user.id end 问题是,在TasksController中,当我编写以下内容时: def index
user ||= User.new
if user.has_role? :admin
can :manage, :all
elsif user.has_role? :collaborator
can :manage, Task, :user_id => user.id
else
can :read, Task, :user_id => user.id
end
问题是,在TasksController中,当我编写以下内容时:
def index
@taks = Task.all.order('created_at DESC')
end
def index
Task.all.order('created_at DESC')
end
以协作者身份登录时,它不会筛选任务列表:
任务加载(1.4ms)从描述处创建的“任务”顺序中选择“任务”。*
但是,当我写这篇文章时:
def index
@taks = Task.all.order('created_at DESC')
end
def index
Task.all.order('created_at DESC')
end
当以协作者身份登录时,它会过滤:
任务加载(0.9ms)从“任务”中选择“任务”。*其中“任务”。“用户id”=2
但不订购清单!我不明白为什么它的行为不同,我如何过滤和排序而不在控制器中添加额外的逻辑
我正在使用rails“4.1.4”、“Desive”3.3.0、“cancan”1.6.10。我刚刚提出了以下解决方案:
def index
@tasks = Tasks.accessible_by(current_ability).all.order('created_at DESC')
end
它会过滤和排序:
任务加载(0.7ms)选择“任务”。*从“taks”中选择“任务”。“用户id”=2订单由描述处创建
由于某些原因,当使用当前能力调用时,它会工作