【问题标题】:Conditional CanCanCan Abilities条件 CanCanCan 能力
【发布时间】:2018-11-12 17:43:02
【问题描述】:

我有一个有许多 ClientApplications 的 ClientServer。我希望用户只能销毁与他们关联的服务器。每个 ClientApplication 对象都有一个与 current_user 匹配的 application_owner_email。如果电子邮件匹配,则它们应该具有关联服务器的销毁权限。 在abilities.rb中,我有以下内容

if user.has_role?(:application_owner)
 can :destroy, ClientServer.all.each do |server|
  server.client_applications.each do |app|
   app.application_owner_email == user.email
  end
end

但这不起作用。我已经设置了类似的条件。例如,以下条件可以正常工作:

can :destroy, ClientApplication.all.each do |app|
  app.application_owner_email == user.email
end

用户只能在他们是 application_owner 的地方销毁 ClientApplications。

对此的任何帮助将不胜感激。

【问题讨论】:

  • 如果server 上的所有 应用程序都归用户所有,您的意思是说用户可以销毁服务器吗?

标签: ruby-on-rails ruby cancancan


【解决方案1】:

Enumerable#each 返回对象self,你可能想要.all?.any?

can :destroy, ClientServer do |server|
  server.client_applications.all?{|app| app.application_owner_email == user.email }
end

注意all? 为空数组返回true

另请注意,带方块的技能无法生成作用域,而且通常速度较慢。

【讨论】:

    猜你喜欢
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多