Ограничить результаты поиска активной записи

StackOverflow https://stackoverflow.com/questions/1205031

  •  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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top