Ruby on rails 我可以在表单输入集合中通过CanCan使用授权吗?

Ruby on rails 我可以在表单输入集合中通过CanCan使用授权吗?,ruby-on-rails,authorization,cancan,simple-form,ruby-on-rails-4,Ruby On Rails,Authorization,Cancan,Simple Form,Ruby On Rails 4,我正在试图找出如何将:收集的用户限制为那些可以的用户:管理,@article.website。如前所述,我正在使用Cancan,我觉得我应该能够做到以下几点: = f.input :user_id, collection: User.all unless cannot? :manage, @article.website 我使用simple_form_作为f输入。有什么想法吗?CanCan旨在回答“用户U能做X吗?”。我不认为cancan的设计是为了有效地回答“哪些用户可以做X?”。理论上你可

我正在试图找出如何将
:收集的
用户限制为那些
可以的用户:管理,@article.website
。如前所述,我正在使用Cancan,我觉得我应该能够做到以下几点:

= f.input :user_id, collection: User.all unless cannot? :manage, @article.website

我使用simple_form_作为f输入。有什么想法吗?

CanCan旨在回答“用户U能做X吗?”。我不认为cancan的设计是为了有效地回答“哪些用户可以做X?”。理论上你可以这样做:

User.all.select { |u| Ability.new(u).can?(:manage, @article.website) }
但这将是极其低效的


除非你的用户数量非常少,否则最好在cancan之外处理这个问题

这不应该在视图中执行-对于这种情况,视图助手可能是最好的选择,但您应该有一个条件,返回特定人员可以看到的集合

module SomethingHelper

  def something_user_ids(article)
    if can? :manage, article.website
      User.all
    else
      User.where(guest: true) # or whatever
    end
  end

end
那么在你看来,你会做一些事情,比如

= f.input :user_id, collection: something_user_ids(@article)