Как определить способности к полиморфной ассоциации с канканканом? - PullRequest
0 голосов
/ 27 ноября 2018

У меня проблема с определением способностей для множественных полиморфных ассоциаций.Вот мои модели:

class Document < ApplicationRecord
  belongs_to :resource, polymorphic: true, optional: true
end

class Section < ApplicationRecord
  has_many :documents, as: :resource, dependent: :destroy
end

class Cabinet < ApplicationRecord
  has_many :documents, as: :resource, dependent: :destroy
end

Далее по моему documents_controller.rb У меня есть следующее:

class DocumentsController < ApplicationController
  load_resource :section
  load_resource :cabinet
  load_and_authorize_resource :document, through: [:section, :cabinet], shallow: true
end

А по моему ability.rb у меня есть:

def viewer(users_role)
  allowed_cabinet_ids = [2,5]
  allowed_section_ids = [1,3,4]

  can [:read, :create], Document, resource_id: allowed_cabinet_ids, resource_type: 'Cabinet'
  can [:read, :create], Document, resource_id: allowed_section_ids, resource_type: 'Section'
end

Проблема возникает, когда я пытаюсь перейти к действию new, чтобы создать документ для раздела.Путь localhost:3000/sections/1/documents/new.

Когда я пытаюсь перейти на эту страницу, я получаю ошибку 403.Я отладил @document в действии new и обнаружил, что cancancan установил resource как #<Document id: nil, name: nil, resource_type: 'Cabinet', resource_id: 1>, что неверно и должно быть resource_type: 'Section'.

Проблема зависит от позицииопределенных способностей, потому что, когда я меняю их, возникает проблема с localhost:3000/cabinets/:id/documents/new.

Мой вопрос заключается в том, как я могу определить способности для полиморфных ассоциаций с различными типами и идентификаторами и гарантировать, что они будут объединять отношения, на которыхположение они?

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