![]() |
![]() |
ВходЗдравствуйте, Гость ( Вход | Регистрация )
|
![]() |
![]() ![]()
Сообщение
#1
|
|
Я только смотрю... ![]() Группа: Пользователи Сообщений: 3 Регистрация: 12.7.2009 Пользователь №: 8,750 Спасибо сказали: 1 Вставить ник ![]() |
Скачал версию AntiSlaed 4.3.1 NEXT(ARTGLOBALS.COM)
Нужен был ресурс под хранение всякой инфы и документов, скачал поставил, настроил, немного наполнил контентом. И тут сталкнулся с такой проблемой: Создаем несколько групп в админке, например AAA и ВВВ, раскидываем юзверов по группам, создаем категории например для модуля статей или новостей и прикручиваем к категории права только для группы ААА. если зайти под юзвером из группы ААА то такой юзвер видит категорию, и ее содержимое. если зайти под юзвером из группы ВВВ то он категорию не видит, НО!!! весь контент принадлежащий к этой группе видит спокойно на главной вместе со всем остальным и может спокойно читать подробное содержимое!!! по ходу при отображении списка и при подробном просмотре нужно добавлять в запрос еще и принадлежность к группе и на разрешение видеть файлы этой группы. Помогите кто понимает что и как надо подправить... Спасибо. |
|
|
![]() |
![]()
Сообщение
#2
|
|
Живу на АС ![]() Группа: Пользователи Сообщений: 752 Регистрация: 11.12.2007 Из: Москва а так по всюду гы Пользователь №: 1,591 Спасибо сказали: 154 Вставить ник ![]() |
вот твой ответ (IMG:http://antislaed.net/style_emoticons/default/smile.gif)
ЦИТАТА(usertemp @ Сегодня, 15:47 ) по ходу при отображении списка и при подробном просмотре нужно добавлять в запрос еще и принадлежность к группе и на разрешение видеть файлы этой группы. АС и права доступа к контенту ну незаточен не как также как и слайд, дороже выйдет переделывать все! не плана денег а нерв и здоровья (IMG:http://antislaed.net/style_emoticons/default/sad.gif) |
|
|
![]()
Сообщение
#3
|
|
Я только смотрю... ![]() Группа: Пользователи Сообщений: 3 Регистрация: 12.7.2009 Пользователь №: 8,750 Спасибо сказали: 1 Вставить ник ![]() |
...... дороже выйдет переделывать все! не плана денег а нерв и здоровья (IMG:http://antislaed.net/style_emoticons/default/sad.gif) (IMG:http://antislaed.net/style_emoticons/default/huh.gif) (IMG:http://antislaed.net/style_emoticons/default/wink.gif) Не так уж все и сложно, просто пед как всегда забросил идею на пол пути. А все что нужно в движке есть.... ладно щас попробую сам реализовать, в голове уже созрела идея - решение это: + две функции из пары строк в function.php и один IF непосредственно перед выводом. |
usertemp, Вас 1 раз(а) поблагодарили за это сообщение: Immeasurability | |
|
|
![]() ![]()
Сообщение
#4
|
|
Я только смотрю... ![]() Группа: Пользователи Сообщений: 3 Регистрация: 12.7.2009 Пользователь №: 8,750 Спасибо сказали: 1 Вставить ник ![]() |
АС и права доступа к контенту ну незаточен не как также как и слайд, дороже выйдет переделывать все! не плана денег а нерв и здоровья (IMG:http://antislaed.net/style_emoticons/default/sad.gif) А вот я вас всех удивлю! (IMG:http://antislaed.net/style_emoticons/default/95.gif) Оказывается заточен! (IMG:http://antislaed.net/style_emoticons/default/85.gif) Сначала хотел свою функцию стряпать, начал ковырять, взял модуль пейдж и стал смотреть, что и как. В начале главной функции есть такая строка КОД $cwhere = catmids($conf['name'], "s.catid"); - начал ковырять, что за зверь эта функция catmids() – оказалась, та самая отвечающая за доступ, Вот она целиком: КОД function catmids() { global $prefix, $db, $conf, $currentlang; $arg = func_get_args(); $where = ($conf['multilingual']) ? "WHERE modul='".$arg[0]."' AND (language='$currentlang' OR language='')" : "WHERE modul='".$arg[0]."'"; $result = $db->sql_query("SELECT id, auth_read FROM ".$prefix."_categories ".$where." ORDER BY id"); while (list($cid, $auth_read) = $db->sql_fetchrow($result)) if (is_acess($auth_read)) $catid[] = $cid; $where = ($catid) ? "AND ".$arg[1]." IN (".implode(", ", $catid).")" : ""; return $where; } Сначала она собирает список ID категорий принадлежащих данному модулю и список какой группе разрешен просмотр данной категории, полученный результат прокручивается и передается в функцию is_acess() которая непосредственно проверяет входит ли данный юзвер в перечисленные группы, если да то собирается список категорий который и передается в первоначальную переменную $cwhere, которая в свою очередь подставляется в основной запрос для вывода контента и категорий. для примера в результате $cwhere ="AND s.catid IN (8, 9, 10)" Вот функция is_acess() целиком: КОД function is_acess($ids) { global $prefix, $db, $user, $conf; if ($ids) { $id = explode("|", $ids); if (is_moder($conf['name'])) { $isa = true; } elseif (is_user() && $id[1]) { $uid = intval($user[0]); $mid = explode(",", $id[1]); foreach ($mid as $val) if ($val) $dmid[] = "g.id=".$val; $dmid = implode(" OR ", $dmid); list($uid) = $db->sql_fetchrow($db->sql_query("SELECT Count(u.user_id) FROM ".$prefix."_users AS u LEFT JOIN ".$prefix."_groups AS g ON ((g.extra=1 AND u.user_group=g.id) OR (g.extra!=1 AND u.user_points>=g.points)) WHERE u.user_id='$uid' AND (".$dmid.")")); $isa = ($uid) ? true : false; } elseif (is_user() && !$id[1]) { $isa = (1 >= $id[0]) ? true : false; } else { $isa = (0 >= $id[0] && !$id[1]) ? true : false; } } else { $isa = false; } return $isa; } В результате я выявил следующее, если юзверов раскидать по различным группам, и различным категориям назначить различные группы – Все работает замечательно, Каждый видит только свое. НО!!! Если в рамках категорий одного модуля, какую неть группу исключить из просмотра всех категорий, то есть ее юзверы по идеи НЕ должны видеть не одной категории – На самом деле такие юзверы будут видеть контент всех разделов. то есть если некая группа не имеет доступа ни к одной категории то в $cwhere="" (пусто) что и приводит к просмотру всего контента, КАК ЭТО ИСПРАВИТЬ??? |
|
|
![]()
Сообщение
#5
|
|
Живу на АС ![]() Группа: Пользователи Сообщений: 765 Регистрация: 10.6.2008 Из: Оренбург Пользователь №: 4,176 Спасибо сказали: 211 Вставить ник ![]() |
Я думаю что надо поправить функцию catmids, в именно:
$where = ($catid) ? "AND ".$arg[1]." IN (".implode(", ", $catid).")" : ""; return $where; } исправить на $where = ($catid) ? "AND ".$arg[1]." IN (".implode(", ", $catid).")" : "AND ".$arg[1]." IN (0)"; return $where; } в этом случае, если категорий нет то where будет равно AND s.catid IN (0) ну а так как нулевой категории нет, то и доступа не будет |
|
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 13 July 2025 - 21:14 |