Ограничить результаты поиска активной записи
-
05-07-2019 - |
Вопрос
У меня есть таблица с сотрудниками (идентификатор, имя, роль) и боссами таблицы отношений (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})
если роль не администратор.
Дополнительный комментарий
Не могли бы вы придумать более общее решение, при котором каждый раз, когда вызывается метод find в активной записи, он проверяет наличие current_user и возвращает только те элементы, которые он / она должен видеть?
Решение
Возможно:
Employee.all(:joins => :bosses, :conditions => {:superior_id => User.current_user.employee})
Другие советы
Вы можете сделать что-то вроде
@boss = Boss.find(params[:id], :include => [:employees])
Чтобы получить босса и их сотрудников. Тогда используйте
@boss.employees
чтобы получить сотрудников этого босса.