Глюк (странности) с доступом >1 юзера
Глюк (странности) с доступом >1 юзера
Сразу сразу, что БД начиналась с версии 2.5 и дошла до 2.7 , но трабл наблюдается и в 2.6
Структура. Проекты->Задачи
Сущности задачи имеет обычный набор текстовых полей, связь с сущностью справочник и поле тип пользователи для назначения задачи.
Юзеры имеют группы доступа Начальник, Исполнитель.
Доступ к сущности Задачи - Начальник - просмотр все (создание, обновление)
Исполнитель - просмотр назначенных (обновление)
А теперь самое загадочное... Нач. создаёт задачу и назначает на одного юзера - всё нормально работает.
Когда на задачу назначается более одного юзера (исполнитель), то доступ имеет только тот, кто находится 2м ( по списку). Но это не всё... юзеры не просто не могут открыть задачу. При просмотре задачи пользователь видит задачу (1-2 сек) , а после этого станица редиректит и выдаёт сообщение "Страница не найдена! Страница, которую вы открываете, не существует. " URL /index.php?module=dashboard/page_not_found
При этом задача на редактирование открывается.
В БД MySQL вижу, что для данной задачи (ИД) в поле пользователи, прописано несколько ИД нужных исполнителей.
Но хуже ещё то, что при создании новой подобной структуры доступы работают как положено.
Я подозреваю, что где-то таки не хватает прав доступа у исполнителя т.к. если назначить ему группу Начальник, то он задачу видит. Но текст ошибки такой малоинформативный, что я ХЗ к чему не хватает доступа.
Коллеги, кто сталкивался с таким глюком? уже 2й день "танцую с бубном" вокруг этой проблемы. Очень не хочется пересоздавать новую сущность и переносить контент, т.к. не уверен, что тоже гладко перенесётся.
Структура. Проекты->Задачи
Сущности задачи имеет обычный набор текстовых полей, связь с сущностью справочник и поле тип пользователи для назначения задачи.
Юзеры имеют группы доступа Начальник, Исполнитель.
Доступ к сущности Задачи - Начальник - просмотр все (создание, обновление)
Исполнитель - просмотр назначенных (обновление)
А теперь самое загадочное... Нач. создаёт задачу и назначает на одного юзера - всё нормально работает.
Когда на задачу назначается более одного юзера (исполнитель), то доступ имеет только тот, кто находится 2м ( по списку). Но это не всё... юзеры не просто не могут открыть задачу. При просмотре задачи пользователь видит задачу (1-2 сек) , а после этого станица редиректит и выдаёт сообщение "Страница не найдена! Страница, которую вы открываете, не существует. " URL /index.php?module=dashboard/page_not_found
При этом задача на редактирование открывается.
В БД MySQL вижу, что для данной задачи (ИД) в поле пользователи, прописано несколько ИД нужных исполнителей.
Но хуже ещё то, что при создании новой подобной структуры доступы работают как положено.
Я подозреваю, что где-то таки не хватает прав доступа у исполнителя т.к. если назначить ему группу Начальник, то он задачу видит. Но текст ошибки такой малоинформативный, что я ХЗ к чему не хватает доступа.
Коллеги, кто сталкивался с таким глюком? уже 2й день "танцую с бубном" вокруг этой проблемы. Очень не хочется пересоздавать новую сущность и переносить контент, т.к. не уверен, что тоже гладко перенесётся.
- support
- Техническая поддержка
- Сообщения: 7661
- Зарегистрирован: 19 окт 2014, 18:22
- Имя: Харчишин Сергей
- Откуда: Крым, Евпатория
Re: Глюк (странности) с доступом >1 юзера
Откройте файл modules\items\module_top.php
Найдите там строчку redirect_to('dashboard/page_not_found');
Там их несколько. Закомментируйте их. Это должно решить проблему.
Найдите там строчку redirect_to('dashboard/page_not_found');
Там их несколько. Закомментируйте их. Это должно решить проблему.
Re: Глюк (странности) с доступом >1 юзера
Спасибо за подсказку.
Это решило проблему. Но хотелось бы понять источник проблемы, дабы потом самому и другим не попасть на эти грабли.
Я заметил, что ссылка страницы задачи имеет вид
это может как-то влиять?
Это решило проблему. Но хотелось бы понять источник проблемы, дабы потом самому и другим не попасть на эти грабли.
Я заметил, что ссылка страницы задачи имеет вид
и при этом для разных юзеров окончание разное/index.php?module=items/info&path=29-32/35-268&redirect_to=subentity&gotopage[953]=1
ID страницы разный.gotopage[953]=1
это может как-то влиять?
- support
- Техническая поддержка
- Сообщения: 7661
- Зарегистрирован: 19 окт 2014, 18:22
- Имя: Харчишин Сергей
- Откуда: Крым, Евпатория
Re: Глюк (странности) с доступом >1 юзера
Проблем в том, что когда переходишь на страницу записи, не срабатывает вложенный запрос, который проверяет права доступа. Почему так происходит, не могу сказать.
Re: Глюк (странности) с доступом >1 юзера
Я могу предоставить Вам копию базы или доступ к копии сайта.
Если дадите наводки на запросы или модули, то готов поковыряться и поискать причину.
Думаю, что продолжать тему стоит через ЛС
Если дадите наводки на запросы или модули, то готов поковыряться и поискать причину.
Думаю, что продолжать тему стоит через ЛС
- support
- Техническая поддержка
- Сообщения: 7661
- Зарегистрирован: 19 окт 2014, 18:22
- Имя: Харчишин Сергей
- Откуда: Крым, Евпатория
Re: Глюк (странности) с доступом >1 юзера
Ну что ж, давайте попробуем разобраться. Базу вы мне уже как то давали и у меня она корректно работает.
Этап 1: найдем запрос, который не выполняется.
Зайдите в систему пользователем, у которого проблема с доступом, затем
откройте файл modules\items\module_top.php и найдите следующий код:
Замените его на
Затем попытайтесь открыть задачу, которая дает сбой и не открывается.
В результате вместо redirect программа остановит работу и на странице будет отображен запрос, который возвращает пустой результат.
Покажите мне тут этот запрос.
Этап 1: найдем запрос, который не выполняется.
Зайдите в систему пользователем, у которого проблема с доступом, затем
откройте файл modules\items\module_top.php и найдите следующий код:
Код: Выделить всё
//check if item exist including access to parent item
$item_query = db_query("select e.id from app_entity_" . $current_entity_id . " e where e.id='" . db_input($current_item_id) . "' " . records_visibility::add_access_query($current_entity_id) . " " . items::add_access_query_for_parent_entities($current_entity_id),false);
if(!db_fetch_array($item_query))
{
redirect_to('dashboard/page_not_found');
}Код: Выделить всё
//check if item exist including access to parent item
$item_query = db_query("select e.id from app_entity_" . $current_entity_id . " e where e.id='" . db_input($current_item_id) . "' " . records_visibility::add_access_query($current_entity_id) . " " . items::add_access_query_for_parent_entities($current_entity_id),true);
if(!db_fetch_array($item_query))
{
exit();
redirect_to('dashboard/page_not_found');
}В результате вместо redirect программа остановит работу и на странице будет отображен запрос, который возвращает пустой результат.
Покажите мне тут этот запрос.
Re: Глюк (странности) с доступом >1 юзера
Код заменил.
Но программа не остановилась и выполнила редирект и и вывела сообщение
Но программа не остановилась и выполнила редирект и и вывела сообщение
методом исключения редиректов заметил, что ошибка устраняется когда закрываю в этом кодеСтраница не найдена!
Страница, которую вы открываете, не существует.
Код: Выделить всё
//if path is corret then check access to parent item including check access to other parent items
$item_query = db_query("select e.id from app_entity_" . $parent_entity_id . " e where e.id='" . db_input($parent_entity_item_id) . "' " . items::add_access_query($parent_entity_id,'') . ' '. items::add_access_query_for_parent_entities($parent_entity_id));
if(!db_fetch_array($item_query))
{
redirect_to('dashboard/page_not_found');
}Re: Глюк (странности) с доступом >1 юзера
добавил в код остановку.
вот результат запроса
вот результат запроса
Код: Выделить всё
select e.id from app_entity_35 e where e.id='268' and ((select count(*) as total from app_entity_35_values cv where cv.items_id=e.id and cv.fields_id='402' and cv.value='17')>0 or e.created_by='17') and e.parent_item_id in (select e.id from app_entity_29 e where e.id>0 )- support
- Техническая поддержка
- Сообщения: 7661
- Зарегистрирован: 19 окт 2014, 18:22
- Имя: Харчишин Сергей
- Откуда: Крым, Евпатория
Re: Глюк (странности) с доступом >1 юзера
Хорошо, теперь открывайте phpmyadmin и выполните по очереди три запроса
1) Оригинальный запрос: результат должные быть пустой
2) тут мы выбираем нашу запись, соответственно одна должна быть в базе
3) Тут мы выбираем значения для поля 402 (я так понимаю это поле пользователи?) и результат должен быть 1
Все верно?
1) Оригинальный запрос: результат должные быть пустой
Код: Выделить всё
select e.id from app_entity_35 e where e.id='268' and ((select count(*) as total from app_entity_35_values cv where cv.items_id=e.id and cv.fields_id='402' and cv.value='17')>0 or e.created_by='17')Код: Выделить всё
select e.id from app_entity_35 e where e.id='268'Код: Выделить всё
select count(*) as total from app_entity_35_values cv where cv.items_id='268' and cv.fields_id='402' and cv.value='17'Re: Глюк (странности) с доступом >1 юзера
Да, поле ИД (402)- тип пользователи
результат п.2 результат п.3
результат п.2 результат п.3