У меня есть таблица с сотрудниками (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 и возвращает только те элементы, он/она должен видеть?
Да, это решает, хотя бы один раз, но на самом деле я все еще ищу более общее решение. Как каждый раз, когда я называю находку, это ограничивает пользователя людьми, к которым он имеет доступ. – Beffa
названные области, возможно, http://railscasts.com/episodes/108-named-scope –
Вы показали мне правильный путь. Я использовал код из именованной области, чтобы написать обзор для себя – Beffa