Tickets добавление без регистрации и не только
Приветствую! Сижу полдня, мозг сломался)
Явно не до конца понимаю работу сессий, кеширования и контекстов для пользователей. Поэтому пока не могу решить задачу, описанную ниже.
1)По данной статье modx.pro/solutions/5288-creating-a-ticket-without-registering-tickets/ сделал создание тикетов без регистрации, немного изменив код сниппета:
сниппет loginTicketUser:
В TicketForm подправил:
2)Решил дать возможность администраторам добавлять тикеты и комментарии к ним от своего имени. Для этого группе Administrator добавил разрешение: web — Super User — TicketVipPolicy
3)Т. к. сайт без формы входа для пользователей, то сделал плагин WebContext, который авторизует менеджера при входе в админку и в контексте web. И заодно деавторизовывает при выходе:
плагин WebContext:
4)Захотел сделать комментарии к тикетам так, чтобы админы могли их оставлять, а остальные — не могли. Нужно было деавторизовать ticketUser, который лепился к неавторизованным пользователям
Для этого сообразил ещё один плагин logoutTicketsUser:
плагин logoutTicketsUser:
$modx->user->get('id')==2 — проверка на этого пользователя ticketUser.
В ИТОГЕ: Всё это работает почти правильно.
Пользователи могут добавлять тикеты, не могут комментировать. Если зайти под админом, то он добавляет тикеты и комменты из публичной части под своим именем.
Однако, если потом выйти из админки, то форма добавления комментариев останется для неавторизованного пользователя (только на этом браузере конечно). И также, при добавлении хоть комментария, хоть тикета будет считаться, что он добавляется от неавторизованного пользователя (анонима — не TicketsUser) и, соответственно не хватает прав — не добавляются.
Если в Chrome нажать ctrl+f5 на странице добавления тикета, то всё начинает работать как требуется. Для Firefox ctrl+f5 не дает данного эффекта
По идее, какие-то куки или сессии остаются. Подскажите, как это довести до ума?
Явно не до конца понимаю работу сессий, кеширования и контекстов для пользователей. Поэтому пока не могу решить задачу, описанную ниже.
1)По данной статье modx.pro/solutions/5288-creating-a-ticket-without-registering-tickets/ сделал создание тикетов без регистрации, немного изменив код сниппета:
сниппет loginTicketUser:
$uid = $modx->user->get('id'); // ID пользователя
if($uid==0) {
$ctx = $modx->context->get('key');
$uid=2;
if ($user = $modx->getObject('modUser', $uid)) {
$modx->user = $user;
$modx->user->addSessionContext($ctx);
}
}
В TicketForm подправил:
if (!$Tickets->authenticated) {
//return $modx->lexicon('ticket_err_no_auth');
$modx->runSnippet('loginTicketUser');
}
Этот пункт работает. Неавторизованные пользователи оставляют комментарии и считается, что оставил их этот ticketUser2)Решил дать возможность администраторам добавлять тикеты и комментарии к ним от своего имени. Для этого группе Administrator добавил разрешение: web — Super User — TicketVipPolicy
плагин WebContext:
<?php
if ($modx->event->name == 'OnBeforeManagerPageInit') {
$modx->user->addSessionContext('web');
}
if ($modx->event->name == 'OnManagerLogout') {
$modx->user->removeSessionContext('web');
}
4)Захотел сделать комментарии к тикетам так, чтобы админы могли их оставлять, а остальные — не могли. Нужно было деавторизовать ticketUser, который лепился к неавторизованным пользователям
Для этого сообразил ещё один плагин logoutTicketsUser:
плагин logoutTicketsUser:
<?php
if($modx->event->name == 'OnParseDocument') {
if($modx->resource->template==6 && $modx->user->get('id')==2) {
$modx->user->removeSessionContext('web');
}
}
template==6 — ресурсы в которых есть форма комментариев$modx->user->get('id')==2 — проверка на этого пользователя ticketUser.
В ИТОГЕ: Всё это работает почти правильно.
Пользователи могут добавлять тикеты, не могут комментировать. Если зайти под админом, то он добавляет тикеты и комменты из публичной части под своим именем.
Однако, если потом выйти из админки, то форма добавления комментариев останется для неавторизованного пользователя (только на этом браузере конечно). И также, при добавлении хоть комментария, хоть тикета будет считаться, что он добавляется от неавторизованного пользователя (анонима — не TicketsUser) и, соответственно не хватает прав — не добавляются.
Если в Chrome нажать ctrl+f5 на странице добавления тикета, то всё начинает работать как требуется. Для Firefox ctrl+f5 не дает данного эффекта
По идее, какие-то куки или сессии остаются. Подскажите, как это довести до ума?
Комментарии: 1
if ($modx->event->name == 'OnManagerLogout') {
$modx->user->removeSessionContext('web');
}
В этом заключается проблема, ибо на это событие сессия не удаляется.Как удалить сессию из контекста web, при выходе из админки?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.