J'ai une table avec les employés (id, nom, rôle) et un patron de table de relations (employee_id, superior_id, les deux foreign_keys à employees.id aux employés).Limiter les résultats d'un enregistrement actif find
Maintenant, si un employé se connecte, je veux seulement montrer à ses employés; un administrateur (role = admin) peut voir tous les employés.
Pour l'administrateur, il est facile:
Employee.find(:all) #to list them
Employee.find(params[:id] #to find one
est-il un moyen facile de limiter les résultats sur seulement mes employés?
Comme toujours ajouter une condition
where employees.id in
(select id from bosses where superior_id = #{User.current_user.employee})
si le rôle est pas administrateur.
Commentaire supplémentaire
Pouvez-vous penser à une solution plus générale, où chaque fois qu'un appel à la méthode de trouver dans le dossier actif, il vérifie current_user et renvoie uniquement les éléments, il/elle doit voir?
oui, cela résout, au moins une fois, mais en fait je suis toujours à la recherche d'une solution plus générale. Comme chaque fois que j'appelle une trouvaille, cela limite l'utilisateur sur les personnes auxquelles il a accès. – Beffa
peut-être des portées nommées, http://railscasts.com/episodes/108-named-scope –
Vous m'avez montré le bon chemin. J'ai utilisé le code de la portée nommée, pour écrire une portée pour moi-même – Beffa