Я создаю проект с организационной диаграммой, используя Codeigniter + MySQL + Active Record.
Есть отделы, перечисленные в качестве дерева организации, Персонал для информации о лицах, Персонал Роли и Staff_Departments, где я храню соответствие: Отдел - Персонал - Роль
Вы можете увидеть структуру ниже:
Отделы (parent_id используется для построения дерева)
Персонал (исходная информация о персонале)
Роли персонала (самый низкий вес, самый высокий в иерархии)
Отделы сотрудников (в каком отделе - Кто - какая роль)
На более позднем этапе Персонал, вероятно, будет принадлежать двум или более отделам с разными ролями. Вот почему я использовал отдельный стол Staff_departments для многих-ко-многим. В этом случае пусть это будет просто и предположим, что 1 сотрудник принадлежит 1 департаменту.
То, что я пытаюсь сделать:
- Менеджер (роль weight = 0 || role_id = 1) в отделе может просматривать Персонал (Сотрудники и Супервизоры), которые работают в своем отделе И все сотрудники (сотрудники и надзиратели) из департаментов, которые являются детьми его отдела. Глубина дерева неизвестна.
- Наблюдатель может просматривать Персонал (только Сотрудники), которые работают только в своем Департаменте.
- Сотрудник может видеть только себя.
Для супервизоров и сотрудников процесс прост, поэтому я думаю, что я в порядке с этим. Для менеджеров, вероятно, я должен что-то делать рекурсивно, но я борюсь каждый раз, когда начинаю писать некоторые строки кода.
Моя идея состоит в том, чтобы в моем контроллере была функция find_related_staff ($ staff_id) {} , в которой я передам идентификатор сотрудника, который вошел в систему, и он вернет массив с идентификаторами связанного с ним персонала. Единственное, что у меня есть, это идентификатор штата, который вошел в систему.
Если менеджер возвращает идентификаторы менеджеров, надзорных органов и сотрудников, связанных с его отделом и менеджерами, надзорными органами и сотрудниками из Детских департаментов его отдела.
Если супервизор возвращает идентификаторы наблюдателей и сотрудников, связанных только в его отделе.
Если Employee возвращает свой идентификатор
Любая идея о том, как достичь этого?