我可以通过CanCan在表单输入集合中使用授权吗?
问题描述:
我想弄清楚如何将用户的:collection
限制为那些谁can? :manage, @article.website
。如前所述,我使用惨惨的,我觉得我应该可以做这样的事情:我可以通过CanCan在表单输入集合中使用授权吗?
= f.input :user_id, collection: User.all unless cannot? :manage, @article.website
我使用simple_form_for因此f.input。有任何想法吗?
答
CanCan旨在回答“用户可以做X吗?”这个问题。我不认为康康可以有效回答“哪些用户可以做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)