статусы пользователей Сильвер/Голд/Платинум

Может кто делал такое или подскажете что правильней: сделать 3 группы и добавлять в каждую из них подходящих под условие пользователей или сделать в 1ой группе 3 роли?
Пётр Молчанов
Пётр Молчанов
21 января 2014, 07:28
modx.pro
2 048

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

Василий Наумкин
21 января 2014, 11:56
Лучше 3 группы — удобнее выбирать и управлять.
    Пётр Молчанов
    24 января 2014, 10:38
    А как получить список групп пользователя? А то щас беру тока:
    $profile = $user->getOne('Profile');
      if($user->get('primary_group')!=0)
    	$userGroup = $modx->getObject('modUserGroup', array('id'=>$user->get('primary_group')));
      Пётр Молчанов
      27 января 2014, 18:15
      Еще вопрос: я ведь когда ставлю новую группу, то она будет доступна пользователю только когда он перезалогинится. Как поступают в этом случае?)
        Aртур Чикин
        27 января 2014, 19:28
        Делают перезагрузку всех прав доступа, и завершают все сеансы.
          Пётр Молчанов
          28 января 2014, 10:47
          Так у мя предполагается, что статусы эти будут ставится в автоматическом режиме. Использовать процессор logout? Можно там разлогинивать какого-либо пользователя самому?
            Aртур Чикин
            28 января 2014, 11:24
            Делают перезагрузку всех прав доступа, и завершают все сеансы.
            завершают все сеансы
            завершают все сеансы
            завершают все сеансы
            завершают все сеансы .......
              Пётр Молчанов
              28 января 2014, 11:35
              Так это ж вручную завершают, так? А у меня автоматом в группы будут пользователи добавляться…
                Aртур Чикин
                28 января 2014, 11:43
                После того как ты создал группу, необходимо перезагрузить права доступа, что бы они (новые группы) вступили в силу, потом завершить все сеансы, что бы пользователи стали все не авторизованные, после чего пари следующем заходе, если у тебя все правильно настроено, пользователь авторизируется в нужной группе, с нужными правами.
                  Пётр Молчанов
                  28 января 2014, 11:54
                  Ок, это понял. Но вопрос в другом, смотри:
                  1. я сбросил права, завершил сеансы
                  2. человек пришел ко мне на сайт, он уже был зареган, авторизуется, т.к. я всех ралогинил
                  3. через какое-то время он подпадает под условие группы, например, Сильвер (сделал нужное кол-во заказов), парсер автоматом добавляет его в группу Сильвер и пользователь получает уведомление об этом на почту
                  В таком случае к нему сразу же применится свойства новой группы, либо опять же ему надо перезалогиниваться?
                  Василий Наумкин
                  28 января 2014, 14:19
                  Эдак ты бы у меня каждый день заново логинился.

                  Не обязательно завершать все сеансы, можно точечно обновлять права юзера.
                    Пётр Молчанов
                    28 января 2014, 14:41
                    Т.е., создавая новые группы, можно после этого 1 раз сбросить права и сеансы и дальше всё будет норм, добавляя пользователя в одну группу и удаляя из другой?
                      Aртур Чикин
                      28 января 2014, 14:46
                      Да, но изменения будут применятся только при новой авторизации пользователем.
                        Василий Наумкин
                        28 января 2014, 14:48
                        Ничего не нужно сбрасывать вообще.

                        Нужно аккуратно обновлять конкретных юзеров, добавленных в группу. — код я дал ниже.

                        Как у меня раньше работала платная подписка? Именно так — юзер добавлялся и удалялся из группы без общих сбросов.
            Василий Наумкин
            28 января 2014, 14:18
            Я выставляю пользователю переменную в поле 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)}");
            		}
            	}
            }
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            15