Условные CanCanCan Способности - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть ClientServer, который имеет много ClientApplications.Я хочу, чтобы пользователи могли уничтожать только те серверы, которые с ними связаны.Каждый объект ClientApplication имеет application_owner_email, который сопоставляется с current_user.Если электронные письма совпадают, они должны иметь разрешение на уничтожение для связанного Сервера.В файле 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

Пользователь может уничтожать ClientApplications только там, где он является владельцем_приложения.

Любая помощь по этому вопросу будет принята.

1 Ответ

0 голосов
/ 12 ноября 2018

Enumerable#each возвращает объект self, вы, вероятно, хотите .all? или .any?:

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

Обратите внимание, что all? возвращает true для пустого массива.

Также обратите внимание, что способности с блоками не могут генерировать области действия и обычно медленнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...