首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >条件CanCanCan能力

条件CanCanCan能力
EN

Stack Overflow用户
提问于 2018-11-13 01:43:03
回答 1查看 125关注 0票数 0

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

代码语言:javascript
复制
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

但这不管用。我也设置了类似的条件。例如,以下条件可以很好地工作:

代码语言:javascript
复制
can :destroy, ClientApplication.all.each do |app|
  app.application_owner_email == user.email
end

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

在这方面的任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2018-11-13 01:59:05

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

代码语言:javascript
复制
can :destroy, ClientServer do |server|
  server.client_applications.all?{|app| app.application_owner_email == user.email }
end

请注意,对于空数组,all?返回true

还要注意的是,具有块的异能不能生成作用域,并且通常速度较慢。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53267426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档