Я использую стандартный класс User / devise.Более того, есть классы A, B и C и ассоциации:
Class User < ApplicationRecord
has_many :As, dependent: :destroy
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:confirmable, :lockable
end
Class A < ApplicationRecord
belongs_to :user # foreign key => user_id
has_many :Bs, dependent: :destroy
end
Class B < ApplicationRecord
belongs_to :A # foreign key => a_id
has_many :Cs, dependent: :destroy
end
Class C < ApplicationRecord
belongs_to :B # foreign key => b_id
end
Что касается cancancan ,ility.rb, существует файл
app / models /ability.rb
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user
can :manage, A, user_id: user.id
can :manage, B, A: { user_id: user.id }
can :manage, C, # ... ?????? <= this is my question point
end
end
Контроллеры:
Class AController < ApplicationController
load_and_authorize_resource
def index
end
end
Class BController < ApplicationController
load_and_authorize_resource
def index
end
end
Class CController < ApplicationController
load_and_authorize_resource
def index
end
end
(load_and_authorize_resource standard cancancan)
Пока все хорошо, если пользователь вызывает A, индекс показывает только записи пользователя A.Если пользователь звонит по B, в индексе показываются только записи пользователей B.
Мой вопрос: я не могу понять, как объявить строку able.rb относительно записей класса C, чтобы ограничить доступ пользователей к классу C, чтобысписок записей класса C (на которые ссылается B (на которые ссылается A (принадлежит пользователю))) только.
Заранее спасибо за помощь, Гарри