статусы пользователей Сильвер/Голд/Платинум
Может кто делал такое или подскажете что правильней: сделать 3 группы и добавлять в каждую из них подходящих под условие пользователей или сделать в 1ой группе 3 роли?
Комментарии: 15
Лучше 3 группы — удобнее выбирать и управлять.
А как получить список групп пользователя? А то щас беру тока:
$profile = $user->getOne('Profile');
if($user->get('primary_group')!=0)
$userGroup = $modx->getObject('modUserGroup', array('id'=>$user->get('primary_group')));
Еще вопрос: я ведь когда ставлю новую группу, то она будет доступна пользователю только когда он перезалогинится. Как поступают в этом случае?)
Делают перезагрузку всех прав доступа, и завершают все сеансы.
Так у мя предполагается, что статусы эти будут ставится в автоматическом режиме. Использовать процессор logout? Можно там разлогинивать какого-либо пользователя самому?
Делают перезагрузку всех прав доступа, и завершают все сеансы.
завершают все сеансы
завершают все сеансы
завершают все сеансы
завершают все сеансы .......
Так это ж вручную завершают, так? А у меня автоматом в группы будут пользователи добавляться…
После того как ты создал группу, необходимо перезагрузить права доступа, что бы они (новые группы) вступили в силу, потом завершить все сеансы, что бы пользователи стали все не авторизованные, после чего пари следующем заходе, если у тебя все правильно настроено, пользователь авторизируется в нужной группе, с нужными правами.
Ок, это понял. Но вопрос в другом, смотри:
1. я сбросил права, завершил сеансы
2. человек пришел ко мне на сайт, он уже был зареган, авторизуется, т.к. я всех ралогинил
3. через какое-то время он подпадает под условие группы, например, Сильвер (сделал нужное кол-во заказов), парсер автоматом добавляет его в группу Сильвер и пользователь получает уведомление об этом на почту
В таком случае к нему сразу же применится свойства новой группы, либо опять же ему надо перезалогиниваться?
1. я сбросил права, завершил сеансы
2. человек пришел ко мне на сайт, он уже был зареган, авторизуется, т.к. я всех ралогинил
3. через какое-то время он подпадает под условие группы, например, Сильвер (сделал нужное кол-во заказов), парсер автоматом добавляет его в группу Сильвер и пользователь получает уведомление об этом на почту
В таком случае к нему сразу же применится свойства новой группы, либо опять же ему надо перезалогиниваться?
Я так понимаю что не нужно будет.
Эдак ты бы у меня каждый день заново логинился.
Не обязательно завершать все сеансы, можно точечно обновлять права юзера.
Не обязательно завершать все сеансы, можно точечно обновлять права юзера.
Т.е., создавая новые группы, можно после этого 1 раз сбросить права и сеансы и дальше всё будет норм, добавляя пользователя в одну группу и удаляя из другой?
Да, но изменения будут применятся только при новой авторизации пользователем.
Ничего не нужно сбрасывать вообще.
Нужно аккуратно обновлять конкретных юзеров, добавленных в группу. — код я дал ниже.
Как у меня раньше работала платная подписка? Именно так — юзер добавлялся и удалялся из группы без общих сбросов.
Нужно аккуратно обновлять конкретных юзеров, добавленных в группу. — код я дал ниже.
Как у меня раньше работала платная подписка? Именно так — юзер добавлялся и удалялся из группы без общих сбросов.
Я выставляю пользователю переменную в поле extended профиля, а потом проверяю её при загрузке им страницы.
Если есть — перезагружаю его права.
Если есть — перезагружаю его права.
$extended = $modx->user->Profile->get('extended')) {
if (!empty($extended['updateGroups'])) {
unset($_SESSION['modx.user.'.$modx->user->id.'.userGroupNames']);
$extended['updateGroups'] = 0;
$modx->user->Profile->set('extended', $extended);
$modx->user->Profile->save();
$ctxQuery = $modx->newQuery('modContext');
$ctxQuery->select($modx->getSelectColumns('modContext', '', '', array('key')));
if ($ctxQuery->prepare() && $ctxQuery->stmt->execute()) {
if ($contexts = $ctxQuery->stmt->fetchAll(PDO::FETCH_COLUMN)) {
$serialized = serialize($contexts);
$modx->exec("UPDATE {$modx->getTableName('modUser')} SET {$modx->escape('session_stale')} = {$modx->quote($serialized)}");
}
}
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.