Как использовать политику Pundit для двух разных моделей? - PullRequest
1 голос
/ 12 ноября 2019

У меня есть три модели.

Пользователь

has_many :projects

Проект

has_many :users

Веб-сайт

belongs_to :project
has_many :users

Я также использую Active Admin и Pundit для управления моим проектом и разрешениями. Мне нужно контролировать пользователей для доступа к объектам веб-сайта, если проект веб-сайта также является проектом пользователя.

По этой причине я готовлю код, подобный этому;

scope.where("#{@record.project.id.in? Project.where(id: ProjectUser.where(user_id: @user.id).ids).ids}")

, но он возвращает сообщение об ошибке:

неопределенный метод `project 'для nil: NilClass

Как решить эту проблему?

1 Ответ

1 голос
/ 12 ноября 2019

Я нашел решение.

class Scope < Scope
 def resolve
   case @user.class.to_s
   when 'AdminUser'
     scope.all
   when 'User'
     project_user_array = ProjectUser.where(user_id: @user.id)
     project_ids = project_user_array.map {|object| object[:project_id] }
     scope.where(project_id: project_ids)
   end
 end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...