AntiSlaed CMS
Вход
Логин: Пароль:Забыли пароль?
Запомнить вас на этом компьютере?
Войти скрытым?

Здравствуйте, Гость ( Вход | Регистрация )

> Внимание!

Адрес нашего форума изменился, теперь мы доступны по адресу antislaed.net. Обновите ссылки и закладки, он больше не изменится.


 
Ответить в данную темуНачать новую тему
> Проблема с разграничением прав в AS 4.3.1
usertemp
сообщение Feb 15 2010, 16:47
Сообщение #1


Я только смотрю...
Иконка группы

Группа: Пользователи

Сообщений: 3
Регистрация:
12.7.2009
Пользователь №: 8,750
Спасибо сказали: 1

Вставить ник




Скачал версию AntiSlaed 4.3.1 NEXT(ARTGLOBALS.COM)

Нужен был ресурс под хранение всякой инфы и документов, скачал поставил, настроил, немного наполнил контентом. И тут сталкнулся с такой проблемой:
Создаем несколько групп в админке, например AAA и ВВВ, раскидываем юзверов по группам, создаем категории например для модуля статей или новостей и прикручиваем к категории права только для группы ААА.
если зайти под юзвером из группы ААА то такой юзвер видит категорию, и ее содержимое.
если зайти под юзвером из группы ВВВ то он категорию не видит, НО!!! весь контент принадлежащий к этой группе видит спокойно на главной вместе со всем остальным и может спокойно читать подробное содержимое!!!

по ходу при отображении списка и при подробном просмотре нужно добавлять в запрос еще и принадлежность к группе и на разрешение видеть файлы этой группы.

Помогите кто понимает что и как надо подправить...
Спасибо.
Перейти в начало страницы
 
     Выделите текст перед нажатием цитаты
+Цитировать сообщение
Immeasurability
сообщение Feb 15 2010, 19:02
Сообщение #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)
Перейти в начало страницы
 
     Выделите текст перед нажатием цитаты
+Цитировать сообщение
usertemp
сообщение Feb 16 2010, 16:20
Сообщение #3


Я только смотрю...
Иконка группы

Группа: Пользователи

Сообщений: 3
Регистрация:
12.7.2009
Пользователь №: 8,750
Спасибо сказали: 1

Вставить ник




ЦИТАТА(Immeasurability @ Feb 16 2010, 03:02 ) *
...... дороже выйдет переделывать все! не плана денег а нерв и здоровья (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
Перейти в начало страницы
 
     Выделите текст перед нажатием цитаты
+Цитировать сообщение
usertemp
сообщение Feb 24 2010, 20:44
Сообщение #4


Я только смотрю...
Иконка группы

Группа: Пользователи

Сообщений: 3
Регистрация:
12.7.2009
Пользователь №: 8,750
Спасибо сказали: 1

Вставить ник




ЦИТАТА(Immeasurability @ Feb 16 2010, 03:02 ) *
АС и права доступа к контенту ну незаточен не как также как и слайд, дороже выйдет переделывать все! не плана денег а нерв и здоровья (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="" (пусто) что и приводит к просмотру всего контента, КАК ЭТО ИСПРАВИТЬ???
Перейти в начало страницы
 
     Выделите текст перед нажатием цитаты
+Цитировать сообщение
vitalik1972
сообщение Feb 25 2010, 13:13
Сообщение #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)
ну а так как нулевой категории нет, то и доступа не будет
Перейти в начало страницы
 
     Выделите текст перед нажатием цитаты
+Цитировать сообщение

Ответить в данную темуНачать новую тему

2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
 

RSS Текстовая версия Сейчас: 20 May 2024 - 04:25
Хостинг предоставлен NetLevel.Ru   Eleanor CMS