Доброго времени суток!
Возможно кто что подскажет Возникла необходимость сделать дерево пользователей в новом проекте.
Условие 1. Нужно, чтобы в дереве пользователь видел своего "создателя" и дерево под собой: кого он зарегал и кто-кого зарегал ниже.
Условие 2. Также пользователь не видит параллельных соседей, которых регает его "создатель". Что-то наподобие: директор, завуч, куратор, учитель, ученик. Или более понятно - млм структура.
Условие 3. Разрешить создание пользователя только под себя, т.е. грубо говоря, не добавлять подчиненным подчиненных.
Для теста создал 2 группы доступа: ур1 и ур2. Группе с ур1 запрещен доступ к сущности Пользователи. Группе с ур2 разрешено просматривать только назначенные и открыт доступ к созданию пользователей.
Создал пользователей: первый из админки, второй под себя одного и так несколько, чтобы прописалось у каждого пользователя создателя ([created_by]). Настроил древовидный список, добавил поле Вычисление с вложенными записями с количеством своих подчиненных.
Далее вопросы по скринам, которые я приложил:
Скрин 1. В админке вся получившаяся структура как надо выглядит. Единственное когда все друг друга зарегали, никакого дерева не получилось. Админ всех раскидал по веткам и все норм.
Скрин 2. Если войти под irina, то все отлично кроме того, что она видит пользователя ruslan, которого создал admin. Т.е. условие 1 работает, усл. 2 нет. Как сделать чтоб работало усл 2.? И я правильно понимаю, так получилось потому, что admin создал ее и ruslan, т.е. у них общий автор = просматривать только назначенные или это не так? Хотя дал юзеру ruslan ур2 и зашел под ним. В дереве пусто, а в таблице он только себя видит, т.е. норм.
Скрин 3. sasha в табличном списке отлично видит и себя и своего зареганного и его зареганного, но в древовидном списке не видит никого. Вопрос почему?
Как можно реализовать условие 3? В голову пока приходит только визуально скрыть кнопки + ниже по ступеням, но возможно есть вариант без костылей.
И последний вопрос: с помощью какого инструмента сделать автоматическое построение дерева? Т.е. нажал кнопку "Добавить пользователя", а он в дереве сразу сел под тебя. Например, на том же 3м скрине sasha зарегал gosha и тот упал в корень.
Заранее благодарен за ответы
Древовидный список пользователей
Древовидный список пользователей
Последний раз редактировалось Rav4ik 07 июл 2023, 00:29, всего редактировалось 2 раза.
Re: Древовидный список пользователей
Вопрос по скрину 2 похоже снимается. Чет я затупил, щас пересмотрел и догнал. Пользователя ruslan создал admin, но привязан то он к дереву irina, поэтому она его и видит. Т.е. получается элементы дерева не смотрят кто их создал [created_by], а смотрят на [parent_id] походу.
Re: Древовидный список пользователей
Подправил вручную дерево, чтоб иерархия авторов совпадала с иерархией дерева. Теперь у irina все норм, а sasha так по прежнему видит пустое дерево, но всех своих видит в таблице.
Re: Древовидный список пользователей
Ночью походу решаются самые непростые задачки) Большую часть вопросов закрыл в итоге сам. Возможно кому пригодится в будущем, поэтому делюсь.
Итак, удалось закрыть 2 вопроса одним решением.
1. Новые зареганные пользователи садятся под автора.
2. Даже если "нащальника" захочет "заму" ("подзаму"/"рабу" и т.д.) добавить "подчиненного", нажимая + не возле себя, то хочешь не хочешь новый юзер автоматом сядет под ним.
3 (бонусом). Если это внедрять не сразу или если вручную поломать иерархию, то все восстановится автоматом если обновить запись (пользователя) или если на время включить галочку "Выполнять динамически".
И все это решают эти строки в новом поле PHP код:
Код можно дополнить, исключив привязку к админу с id=1
В итоге остается один не закрытый вопрос: как sashe увидеть свое дерево
Если точнее, как не корневым, т.е. дочерним пользователям видеть свою ветку
Итак, удалось закрыть 2 вопроса одним решением.
1. Новые зареганные пользователи садятся под автора.
2. Даже если "нащальника" захочет "заму" ("подзаму"/"рабу" и т.д.) добавить "подчиненного", нажимая + не возле себя, то хочешь не хочешь новый юзер автоматом сядет под ним.
3 (бонусом). Если это внедрять не сразу или если вручную поломать иерархию, то все восстановится автоматом если обновить запись (пользователя) или если на время включить галочку "Выполнять динамически".
И все это решают эти строки в новом поле PHP код:
Код: Выделить всё
if([parent_id] != [created_by]) {
db_query ('update app_entity_1 set parent_id='.[created_by].' where id='.[id]);
}
В итоге остается один не закрытый вопрос: как sashe увидеть свое дерево
Если точнее, как не корневым, т.е. дочерним пользователям видеть свою ветку
Re: Древовидный список пользователей
Да, действительно, на странице записи ветка пользователя отображается как надо. Получается так же не корневую ветку нельзя показать в списке пользователей? Будет ли это исправлено в ближайшем обновлении? Иначе как-то придется скрывать список пользователей для всех (пункт пеню, ссылка в крошках), т.е. видеть не дальше страницы записи.
И кстати возник новый вопрос, можно ли в системе отключить/скрыть пункты меню для основных сущностей (без правки php/js)? Вижу что много кто об этом спрашивал, но без ответов.
-
- Сообщения: 2519
- Зарегистрирован: 14 окт 2020, 09:13
- Имя: Ruslan
- Откуда: Moscow
- Контактная информация:
Re: Древовидный список пользователей
можно, используйте пункт пользовательский css.