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)