Tickets добавление без регистрации и не только

Приветствую! Сижу полдня, мозг сломался)
Явно не до конца понимаю работу сессий, кеширования и контекстов для пользователей. Поэтому пока не могу решить задачу, описанную ниже.

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');
}
Этот пункт работает. Неавторизованные пользователи оставляют комментарии и считается, что оставил их этот ticketUser

2)Решил дать возможность администраторам добавлять тикеты и комментарии к ним от своего имени. Для этого группе Administrator добавил разрешение: web — Super User — TicketVipPolicy

3)Т. к. сайт без формы входа для пользователей, то сделал плагин WebContext, который авторизует менеджера при входе в админку и в контексте web. И заодно деавторизовывает при выходе:

плагин 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 не дает данного эффекта

По идее, какие-то куки или сессии остаются. Подскажите, как это довести до ума?
Павел
05 июля 2015, 17:06
modx.pro
2 089
0

Комментарии: 1

Павел
08 июля 2015, 17:01
0
if ($modx->event->name == 'OnManagerLogout') {
	$modx->user->removeSessionContext('web');
}
В этом заключается проблема, ибо на это событие сессия не удаляется.

Как удалить сессию из контекста web, при выходе из админки?
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1