如何对两种不同的模型使用Pundit策略



我有三个模型。

用户

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}")

但它返回错误消息:

nil:NilClass 的未定义方法"project">

如何解决此问题?

我找到了解决方案。

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

用户has_many :projects-它为用户实例提供了project_ids方法。使用它:

scope.where(project_id: @user.project_ids)

相关内容

  • 没有找到相关文章

最新更新