2017-05-29 5 views
0

Je dois autoriser un projet basé sur les invitations qu'un fournisseur a obtenu. Le fournisseur a un champ "user_id".Pundit Authorize d'un autre modèle

project.rb

has_many :invites 
has_many :suppliers, :through => :invites 

project_policy.rb

class ProjectPolicy < ApplicationPolicy 
    attr_reader :user, :project 

    def initialize(user, project) 
    @user = user 
    @project = project 
    end 

    def show? 
    ##need help on the next line## 
    if project.joins(:invites).joins(:suppliers).pluck("suppliers.user_id") == user.id 
     return true 
    else 
     return false 
    end 
    end 
end 

Comment puis-je montrer que les projets appropriés en fonction de la user_id dans la table des fournisseurs? Si cela doit être dans la portée, alors comment puis-je vérifier le suppliers.user_id dans la portée?

+0

Désolé. Je ne comprends pas votre question. Est-ce que ça fonctionne comme du code? si maintenant. Quel est le problème. Pourriez-vous nous montrer le résultat de la requête? –

+0

Ouais, j'ai les relations de modèle mis en place, mais en essayant de comprendre ce qu'il faut mettre dans la politique pundit 'show? 'Afin qu'il ne permette l'accès qu'aux projets – HoosierCoder

Répondre

0

Comment est-ce que je peux montrer seulement les projets appropriés basés sur le user_id dans le tableau de fournisseurs?

The has_many :through Association

Invites.rb 
    belongs_to :supplier 
    belongs_to :project 

modèle de projet a de nombreux fournisseurs

Project.rb 
    has_many :invites 
    has_many :suppliers, :through => :invites 

modèle de fournisseur a de nombreux projets

Supplier.rb 
    has_many :invites 
    has_many :projects, :through => :invites 

Trouver le fournisseur et utiliser le has_many :projects, :through => :invites

Supplier.find_by(user_id: user.id).projects 
+0

Based sur votre indice, fait fonctionner avec: 'Supplier.find_by (user_id: user.id) .projects.pluck (" projects.id "). include? project.id' dans la politique 'show?' Pensez-vous que c'est assez sec? Si oui, pouvez-vous l'inclure dans votre réponse, et je vais accepter .. – HoosierCoder

+0

@HoosierCoder Oui, mais si vous avez besoin de plus d'aide, vous pouvez consulter le forum d'échange de pile codereview –

+0

@HoosierCoder merci beaucoup. Bonne chance avec votre application! –