Joomla 1.5 Разделение пользователей на группы

Тема в разделе "Программирование", создана пользователем FeaMor, 14.03.2010.

  1. FeaMor
    Offline

    FeaMor Пользователь

    Регистрация:
    01.09.2008
    Сообщения:
    104
    Симпатии:
    2
    Пол:
    Мужской
    Да, на самом деле она влияет, не я не могу залезть в нее ((( там слишком много параметров каких-то
    в поле data:
    Код (CODE):
    1. __default|a:5:{s:24:"session.client.forwarded";s:12:"192.168.0.10";s:22:"session.client.browser";
    2. s:85:"Mozilla/5.0 (Windows; U; Windows NT 5.2; ru; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3";
    3. s:15:"session.counter";i:1;s:8:"registry";O:9:"JRegistry":3:{s:17:"_defaultNameSpace";
    4. s:7:"session";s:9:"_registry";a:1:{s:7:"session";a:1:{s:4:"data";O:8:"stdClass":0:{}}}s:7:"_errors";
    5. a:0:{}}s:4:"user";O:5:"JUser":19:{s:2:"id";s:3:"513";s:4:"name";s:38:"Иванов Иван Иванович"
    6. ;s:8:"username";s:8:"prn_demo";s:5:"email";s:19:"email@mail.ru";s:8:"password";
    7. s:65:"7163454e4ccdc839599d26ce66d14577:4CrJ76GZIz7DtP8IP4wwuQJp2KlfpSMo";
    8. s:14:"password_clear";s:0:"";s:8:"usertype";s:6:"Prn";s:5:"block";s:1:"0";s:9:"sendEmail";
    9. s:1:"0";s:3:"gid";s:2:"31";s:12:"registerDate";s:19:"2010-05-03 14:13:05";s:13:"lastvisitDate";
    10. s:19:"2010-05-06 07:44:59";s:10:"activation";s:0:"";s:6:"params";s:56:"admin_language=
    11. language=
    12. editor=
    13. helpsite=
    14. timezone=3
    15.  
    16. ";s:3:"aid";i:2;s:5:"guest";i:0;s:7:"_params";O:10:"JParameter":7:{s:4:"_raw";s:0:"";
    17. s:4:"_xml";N;s:9:"_elements";a:0:{}s:12:"_elementPath";a:1:{i:0;s:68:"/home/htdocs/
    18. public_html/cab/libraries/joomla/html/parameter/element";}s:17:"_defaultNameSpace";
    19. s:8:"_default";s:9:"_registry";a:1:{s:8:"_default";a:1:{s:4:"data";O:8:"stdClass":5:
    20. {s:14:"admin_language";s:0:"";s:8:"language";s:0:"";s:6:"editor";s:0:"";s:8:"helpsite";
    21. s:0:"";s:8:"timezone";s:1:"3";}}}s:7:"_errors";a:0:{}}s:9:"_errorMsg";N;s:7:"_errors";
    22. a:0:{}}}


    поэтому я тупо удаляю данную сессию, но боюсь, что после этого пользователя будет выкидывать из системы для авторизации, но это все же лучшее решение...
    Вот функция для того, что бы смотреть, если есть пользователь с определенный id в какой-нить особой таблице ( у меня jos_Prn_Group_User), то тогда я ему присваиваю принадлежность к новой группе (31), иначе делаю его обычным зарегистрированным:
    Код (PHP):
    1. function isPRN( $prnid )
    2.     {
    3.         $query = '
    4. SELECT `aro`.`id`, `prn`.`users_id`
    5. FROM `#__core_acl_aro` as `aro`
    6. LEFT OUTER JOIN `#__Prn_Group_User` as `prn` ON `prn`.`users_id` = `aro`.`value`
    7. WHERE `aro`.`value` = "'.$prnid.'"
    8. LIMIT 1;
    9.         ';
    10.         $db =& JFactory::getDBO();
    11.         $db->setQuery($query);
    12.         $ispar = $db->loadObject();
    13.         if ($ispar->users_id == NULL) {
    14.             $query = '
    15. UPDATE `#__users` SET `usertype` = "Registered", `gid` = "18"
    16. WHERE `gid` = "31"
    17. AND `id` = "'.$prnid.'";
    18.             ';
    19.             $db =& JFactory::getDBO();
    20.             $db->setQuery($query);
    21.             $db->Query();
    22.             $query = '
    23. UPDATE `#__core_acl_groups_aro_map`  SET `group_id` = "18"
    24. WHERE `group_id` = "31"
    25. AND `aro_id` = "'.$ispar->id.'";
    26.             ';
    27.             $db =& JFactory::getDBO();
    28.             $db->setQuery($query);
    29.             $db->Query();
    30.         }
    31.         else {
    32.             $query = '
    33. UPDATE `#__users` SET `usertype` = "Prn", `gid` = "31"
    34. WHERE `gid` = "18"
    35. AND `id` = "'.$prnid.'";
    36.             ';
    37.             $db =& JFactory::getDBO();
    38.             $db->setQuery($query);
    39.             $db->Query();
    40.             $query = '
    41. UPDATE `#__core_acl_groups_aro_map` SET `group_id` = "31"
    42. WHERE `group_id` = "18"
    43. AND `aro_id` = "'.$ispar->id.'";
    44.             ';
    45.             $db =& JFactory::getDBO();
    46.             $db->setQuery($query);
    47.             $db->Query();
    48.         }
    49.         $query = '
    50. DELETE FROM `#__session`
    51. WHERE `userid` = "'.$prnid.'";
    52.         ';
    53.         $db =& JFactory::getDBO();
    54.         $db->setQuery($query);
    55.         $db->Query();
    56.     }
     
    Последнее редактирование: 06.05.2010
  2. omfgpanda
    Offline

    omfgpanda Недавно здесь => Cпециалист <=

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    Я смотрю - Вы серьёзно настроены "раковырять" джумлу )))
    Предлагаю менее болезненный вариант:

    Код (PHP):
    1. $currentSession = JSession::getInstance('none',array()); //получаем объект Сессии
    2. $currentSession->restart();


    Может просто перезапустить сессию )
     
  3. FeaMor
    Offline

    FeaMor Пользователь

    Регистрация:
    01.09.2008
    Сообщения:
    104
    Симпатии:
    2
    Пол:
    Мужской
    Ну я не знаю где о всех переменных найти информацию %) (на русском)

    На сколько я понял, это перезаписывает сессию и это хорошо, а то я переживал о вылетании пользователя из авторизации...
    а нужно именно "=" ставить, а не "=&" ?
    больше в вышенаписанном коде нет недочетов? мне именно интересно, нужно ли каждый раз повторять строку
    Код (PHP):
    1. $db =& JFactory::getDBO();
    ?
     
    Последнее редактирование: 07.05.2010
  4. March_Cat
    Offline

    March_Cat Недавно здесь

    Регистрация:
    27.10.2009
    Сообщения:
    11
    Симпатии:
    0
    Пол:
    Мужской
    прогоняю запрос даёт ошибку!

    -- Select the parent node to insert after
    SELECT @ins_id := id, @ins_lft := lft, @ins_rgt := rgt
    FROM jos__core_acl_aro_groups
    WHERE name
    COLLATE utf8_general_ci = @parent_name

    Ответ MySQL:
    #1146 - Table 'stixi.jos__core_acl_aro_groups' doesn't exist

    подскажите пожалуйсто в чём проблема может быть
     
  5. omfgpanda
    Offline

    omfgpanda Недавно здесь => Cпециалист <=

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    не jos__core_acl_aro_groups , а jos_core_acl_aro_groups
     
  6. March_Cat
    Offline

    March_Cat Недавно здесь

    Регистрация:
    27.10.2009
    Сообщения:
    11
    Симпатии:
    0
    Пол:
    Мужской
    пропустил первый запрос вышла ошибка такого вида
    SQL-запрос:

    -- Select the parent node to insert after
    SELECT @ins_id := id, @ins_lft := lft, @ins_rgt := rgt
    FROM jos_core_acl_aro_groups
    WHERE name = @parent_name

    Ответ MySQL:
    #1267 - Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '='

    подскажите что делать

    FROM jos_core_acl_aro_groups тоже самое выдаёт
     
    Последнее редактирование: 04.08.2010
  7. March_Cat
    Offline

    March_Cat Недавно здесь

    Регистрация:
    27.10.2009
    Сообщения:
    11
    Симпатии:
    0
    Пол:
    Мужской
    может кто подскажет другой путь?
    Цель такая нужно два материала и чтобы доступ был для материала №1 только одному пользователю,
    а для материала №2 ТОЛЬКО другому. И только они должны их видить.
     
  8. Offline

    Upsarin Недавно здесь

    Регистрация:
    11.07.2012
    Сообщения:
    8
    Симпатии:
    0
    Пол:
    Мужской
    а как реализовать такой способ в community builder, там ведь отдельная система от joomla'ской регистрации...
    подскажите плз.
     
  9. Offline

    Upsarin Недавно здесь

    Регистрация:
    11.07.2012
    Сообщения:
    8
    Симпатии:
    0
    Пол:
    Мужской
    в коде пропиши
    1) сделай проверку на текущий материал
    2) сделай проверку на id пользователя или на группу пользователей
    3) пропиши if (такой то материал) && (такая то группа пользователей) (или диапозон групп с такой то до такой то) { показать материал }
    как то так...
    я так делал для распределения прав к комментариям. одни группы могли писать только в свой материал и могли видеть, а остальные группы могли только читать материа и комментарии, но не могли писать)
    думаю почти тоже самое...
     

Поделиться этой страницей

Загрузка...