26 (2017-03-09 10:38:11 отредактировано engy)

Re: Плагин Multi User

Кстати, проблему ограничения доступа к редактированию "чужих" страниц можно решить, вставив в файл admin/edit.php такую вот строчку:

 if ($data_edit->owner != $USR and $USR != $GSADMIN)  {die('you cannot load this page directly.');}

(я вставил перед комментарием // MKE ASELECT BOX OF AVAILABLE TEMPLATES, т.е. примерно строка 78-79),
где:
owner - имя текстового поля, созданного мною в редакторе типа специальных страниц (в админке I18n Special Pages)
$USR - имя (логин) пользователя, залогиненного в админке.

Ну, т.е. так это выглядит в админке:
http://paste.opensuse.org/c1f9c3bb
http://paste.opensuse.org/b0fa887d

Аналогично можно запретить редактирование обычных страниц, редактируемых через edit.php, чуть изменив код:

if $author != $USR and $USR != $GSADMIN  {die('you cannot load this page directly.');}

где $author - имя (логин) создателя страницы, $GSADMIN - логин администратора, заданный в gsconfig.php (если все страницы созданы админом, редактировать их сможет только он, поэтому можно аналогично создать доп. поле через I18 Custom Fields или DY Website Custom Fields).

Это конечно, неправильно и нарушение целостности ядра cms, и после очередного обновления версии cms edit.php будет заменён на новый и строчку нужно будет вставлять заново.

Поэтому я пробую сделать маленький плагинчик, который бы добавлял этот код в админку. Если получится (я ни разу не программист) - выложу.

Поделиться

27

Re: Плагин Multi User

есть такой плагин Admin Header Footer, с его помощью можно скрыть все, что угодно smile

<?php global $USR; if ($USR != 'admin') { ?>
<style>
#page_submit, #dropdown {
    display : none !important;
}
</style>
<?php } ?>

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

Поддержать GetSimple CMS по-русски ЯДом

Сайт olsv64

Поделиться

28

Re: Плагин Multi User

Огромная благодарность engy и Олег за столь развернутые ответы!
Теперь появилось направление "куда копать".
Полон оптимизма :-)  О результатах обязательно отпишусь!

Поделиться

29 (2017-03-09 23:11:56 отредактировано engy)

Re: Плагин Multi User

Олег, спасибо! Отличная подсказка! Я как-то забыл совсем про этот плагин, у меня с его помощью вставлен только текст копирайта в админке).

roman, дык, пока не за что. С плагином оказалось несколько сложнее (для меня), чем я думал.

Кстати, наткнулся сегодня на Гитхабе на новый плагин для настройки прав пользователей в GetSimple от Kevin Van Lierde ( http://webketje.com, разработчик GS Custom Setting) - gs usermgr - https://github.com/webketje/gs_usermgr. Плагин, судя по описанию и структуре очень крут, устанавливается в 1 клик, но совершенно не работает в  версии 3.3.13. Либо заточен под версию 3.3.7 (как указано в описании пофиксеных ошибок, но зачем?), либо создаётся под версию 3.4 на замену Multi User (как указано в wiki на Гитхабе).

Поделиться

30

Re: Плагин Multi User

этот молодой человек и GS Custom Setting не доделал и бросил, я научился с ним работать, штука очень полезная, на серверах лайтспид не работает, так они не дружат с JSON

Поддержать GetSimple CMS по-русски ЯДом

Сайт olsv64

Поделиться

31 (2017-03-10 02:22:16 отредактировано engy)

Re: Плагин Multi User

Ну, на оф. форуме GetSimple он же объяснил, что замахнулся на неохватный объем работы по GS Custom Setting, решил "объять необъятное". Всё же его последняя версия (0.4) умеет очень много, добрый десяток плагинов, наверное, заменяет. Спасибо ему, на самом деле, за такой плагин.

И, он же переключился на доделку Components Extended. Он и писал, что это оптимальная замена GS Custom Setting (по мне, так - нет, для разработчиков - может быть, но не для конечных пользователей). А, кстати, плагин компонетов для страниц от Дмитрия Яковлева добавлен в официальный список рекомендованных к использованию в версии 3.4 https://vk.com/wall609248_704 Так что, компонентов у нас будет много).

И спасибо Вам, что предупредили с проблемой с LiteSpeed. Я с этим не сталкивался, по крайней мере, от клиентов жалоб не было (видимо, все очень удачно сидят на Апаче).

И, еще (хоть и не в тему, извините) - 8 дней назад обновился Front Router Plugin от lokothodida - https://github.com/lokothodida/gs-front-router. Кажется, это, таки, универсальный инструмент для создания различных типов контента, включая каталоги (правда, не для конечных пользователей).

Поделиться

32

Re: Плагин Multi User

боюсь, до Front Router Plugin я еще не дорос, ибо в пхп не понимаю ни чего, а Дмитрий - единственный активный русскоязычный разработчик

Поддержать GetSimple CMS по-русски ЯДом

Сайт olsv64

Поделиться

33 (2017-03-14 05:58:29 отредактировано engy)

Re: Плагин Multi User

olsv64 пишет:

есть такой плагин Admin Header Footer, с его помощью можно скрыть все, что угодно smile

С подсказки Олега у меня получился такой вот сниппет для огранчения прав доступа к редактированию "чужих" страниц на сайте с несколькими пользователями:

Годится как для базовых, так и для специальных страниц.

Шаг 1. Используем плагин Admin Header Footer. Вставляем в поле для Header код (стили указаны для дефолтной темы админки, GetSimple 3.3.13):

<?php
global $USR, $GSADMIN, $data_index, $owner;
if (basename($_SERVER['PHP_SELF']) =='edit.php') { {
$id = isset($_GET['id'])? var_out( $_GET['id']): null;
$data_index = getXML(GSDATAPAGESPATH.$id.'.xml');
$owner = $data_index -> owner;
};
if ($owner != $USR && $USR != $GSADMIN) { ?>
<div style="display:block;padding:15px;margin:15% auto auto;text-align:center; background-color:#fff;">
<h3>Уважаемый <?php echo strtoupper ($USR); ?>,<br>
<?php die ('Вы не имеете права редактировать эту страницу.');
} ?></h3></div>
<?php };
if ($USR != $GSADMIN) { ?>
<style>
table td.delete {display:none!important;}
#edit #dropdown li:last-child {display:none!important;}
</style>
<?php } ?>

Шаг 2. UPD Используем плагин I18n Special Fields.

В его админке создаем текстовое поле с именем owner (Владелец страницы), значение по умолчанию - "admin" (или другое значение, логин администратора сайта, заданный в gsconfig.php; при необходимости - раскомментировать # define('GSADMIN', 'admin')  и вписать уникальный логин для администратора). Поле будет отображаться при редактировании любой страницы, как базовой, так и специальной. В случае передачи любой созданной страницы конкретному пользователю открываем страницу для редактирования и меняем "admin" на логин пользователя, например, "user".

Результат: пользователь, не имеющий прав администратора, сможет редактировать только свою, созданную им, или переданную ему страницу. При этом user видит список всех страниц, но не может их удалить. При попытке отредактировать чужую страницу в админпанели он видит сообщение: "Вы не имеете права редактировать эту страницу".

Поделиться

34

Re: Плагин Multi User

engy, мы с Вами "копаем" примерно в одном направлении smile
Я тоже решил использовать плагин Admin Header Footer. Еще я модифицировал плагин Multi User добавив пользователю еще одно поле: "USID".
При создании нового пользователя в Multi User, ему в поле "USID" вставляется текущая дата в секундах (например "1489473845"), а в поле "Целевая страница" вставляется адрес спец страницы с UserId (например "edit.php?id=1489473845")

Для этого пользователя создается спец страница у которой в качестве постоянной ссылки используется USID (1489473845)

Таким образом, пользователь при авторизации сразу попадает на страницу редактирования своей спец страницы, а остальные страницы можно скрыть просто скрыв весь блок сайтбара с помощью Admin Header Footer.

код для Admin Header Footer:

<?php 
global $USR;
global $GSADMIN;
global $USID;
global $id;
if ($USR != $GSADMIN) { 
    echo '<style>#sidebar{display: none;}</style>'; /* если НЕ админ, скрываем сайтбар */
    if ($id != $USID)  {die('you cannot load this page directly.');}  /* если id юзера не совпадает с id страницы */
}
?>

Да, еще пришлось модифицировать файл /admin/inc/common.php
после строки "$TIMEZONE = $datau->TIMEZONE;" (у меня 181-я строка) я встакил

$USID = $datau->USID;

Это для того, чтобы Admin Header Footer смог получить USID

Подозреваю что методы мои "ламерские" smile Я совсем мало знаю PHP

Поделиться

35

Re: Плагин Multi User

roman, у Вас, имхо, более грамотный и элегантный подход, да и код оптимальнее. Мне понравилось, сохранил себе в блокнотик).

Просто я стараюсь не модифицировать установленные плагины и ядро cms без крайней необходимости, т.к. более-менее регулярно устанавливаю свежие версии, а постоянно вписывать в них изменения - удовольствие то ещё.

Поделиться

36

Re: Плагин Multi User

engy, да мне и самому не очень нравится вносить изменения в ядро.
Я подправил код для Admin Header Footer. Теперь нет необходимости вносить изменения в common.php
Admin Header Footer теперь сам получает USID
Исправленный код для Admin Header Footer:

<?php 
global $USR;
global $GSADMIN;
global $id;

define('GSROOTPATH', get_root_path());
define('GSUSERSPATH', GSROOTPATH. 'data/users/');
$datau = getXML(GSUSERSPATH . $USR.'.xml');
$USID = $datau->USID;
    
if ($USR != $GSADMIN) { 
    echo '<style>#sidebar{display: none;}</style>'; /* если НЕ админ, скрываем сайтбар */
    if ($id != $USID)  {die('you cannot load this page directly.');} /* если id юзера не совпадает с id страницы */
}

?>

Поделиться

37

Re: Плагин Multi User

roman пишет:

Admin Header Footer теперь сам получает USID

roman, супер! В мемориз, однозначно!

Поделиться