2009-07-30 4 views
0

У меня есть таблица с сотрудниками (id, name, role) и боссами таблицы отношений (employee_id, superior_id; как foreign_keys для employee.id для сотрудников).Ограничить результаты поиска активной записи

Теперь, если сотрудник входит в систему, я хочу показать только его сотрудников; администратор (role = admin) может видеть всех сотрудников.

Для админа это легко:

Employee.find(:all) #to list them 
Employee.find(params[:id] #to find one 

Есть простой способ ограничить результаты только на моих сотрудников?

Как всегда добавить условие

where employees.id in 
(select id from bosses where superior_id = #{User.current_user.employee}) 

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

Дополнительный комментарий

Не могли бы вы придумать более общего решения, где каждый раз, когда вызов метода находкой в ​​активной записи, она проверяет CURRENT_USER и возвращает только те элементы, он/она должен видеть?

ответ

2

Возможно:

Employee.all(:joins => :bosses, :conditions => {:superior_id => User.current_user.employee}) 
+0

Да, это решает, хотя бы один раз, но на самом деле я все еще ищу более общее решение. Как каждый раз, когда я называю находку, это ограничивает пользователя людьми, к которым он имеет доступ. – Beffa

+1

названные области, возможно, http://railscasts.com/episodes/108-named-scope –

+0

Вы показали мне правильный путь. Я использовал код из именованной области, чтобы написать обзор для себя – Beffa

0

Вы можете сделать что-то вроде

@boss = Boss.find(params[:id], :include => [:employees]) 

Чтобы принести босса и их сотрудников. Затем используйте

@boss.employees 

, чтобы получить сотрудников этого босса.

Смежные вопросы