Задача: распределить права на редактирование контента.
Под логином админа создаю тексты. Во второй вкладке "Опции" отмечаю "дополнительных редакторов".
После этого пользователь, не отмеченный как "дополнительный редактор" свободно изменяет контент.
Вопрос:
1) служит ли раздел "дополнительные редакторы" для распределения прав на редактирование контента?
2) есть ли модули, позволяющие гибко настраивать права пользователей на просмотр-редактирования как в открытой, так и закрытой (админ) части сайта?
Вопрос по настройке прав пользователей
Re: Вопрос по настройке прав пользователей
1) Вообще служит, только я сам не пробовал никогда, видимо для этого флаг редактирования любого контента у этого редактора должен быть выключен?!
2) Для фронт-энда - FEU, в общем-то можно реализовать что угодно. Для бэкэнда не припоминается, может быть кто подскажет.
2) Для фронт-энда - FEU, в общем-то можно реализовать что угодно. Для бэкэнда не припоминается, может быть кто подскажет.
unsigned double ZYV;
Re: Вопрос по настройке прав пользователей
1) Покопался глубже:ZYV wrote: 1) Вообще служит, только я сам не пробовал никогда, видимо для этого флаг редактирования любого контента у этого редактора должен быть выключен?!
2) Для фронт-энда - FEU, в общем-то можно реализовать что угодно. Для бэкэнда не припоминается, может быть кто подскажет.
Встроенная система распределения прав весьма кривая и по умолчанию отключена (видимо, в виду бесполезности).
Как пользоваться: глобальное управление правами происходит на уровне групп. Для создания ограниченных аккаунтов необходимо привязать их к отдельным группам с активированным "Advanced usage of the the File Manager module" в таблице "Права групп" раздела "Пользователи и группы".
Однако управление правами весьма ограничено:
1) Установка прав через опцию "дополнительные редакторы" не наследуется существующими и вновь созданными потомками. К тому же опция распространяется только на функцию редактирования - создание и удаление остаются недоступны.
2) Настройка прав на создание и удаление контента возможно только через глобальные права группы, которые распространяются на все разделы и страницы сайта
Получается, что с помощью встроенной системы вы можете дать пользователю либо управление всем контентом, либо, максимум, - возможность покопаться в нескольких уже созданных страниц.
Для распределения "редакторских" прав по отдельным разделам (что, по-моему, более актуально) придется разбираться с FEU.
Last edited by raunlach on Mon Dec 29, 2008 9:55 am, edited 1 time in total.
Re: Вопрос по настройке прав пользователей
Покапался с FEU (FrontEndUsers)
Модуль предназначен для управления пользователями и группами, а так же обеспечивает механизмы авторизации.
Для разводки прав пользователей на тот или иной функционал требуется дополнительные модули.
CustomContent
Хороший модуль для разводки ФронтЕнда, но он не позволяет управлять правами в админ-панели (БэкЕнда).
FeuPermissions
По описанию вроде то, что доктор прописал, однако при инсталяции эта зараза выдает ошибку:
Копирую файл вручную, заново запускаю установку. Выдает
Но дальше опять ступор - модуль не активируется.
Модуль предназначен для управления пользователями и группами, а так же обеспечивает механизмы авторизации.
Для разводки прав пользователей на тот или иной функционал требуется дополнительные модули.
CustomContent
Хороший модуль для разводки ФронтЕнда, но он не позволяет управлять правами в админ-панели (БэкЕнда).
FeuPermissions
По описанию вроде то, что доктор прописал, однако при инсталяции эта зараза выдает ошибку:
Code: Select all
Warning: copy(W:\home\test01\www\modules\FrontEndUsers\temp\FrontEndUsers_copy.api.php) [function.copy]: failed to open stream: No such file or directory in W:\home\test01\www\modules\FeuPermissions\method.install.php on line 57
file (FrontEndUsers_copy.api.php) could not be copied! Please, do it manually!here
Code: Select all
file copied!here
Конечное решения
Модулей для БэкЕнда не нашлось, поэтому решил внести изменения в стандартный функционал управления правами.
Распишем необходимые доработки стандартного функционала управление правами:
1) При установке прав через опцию "дополнительные редакторы" права должны наследоваться всеми потомками.
2) При создании и редактировании в качестве родителей можно указать только страницы, на изменения которых пользователь имеет право.
Для решения первой задачи необходимо заменить функцию SetAdditionalEditors в файле Class.content.inc.php
а так же заменить вызов этой функции в файле Editcontent.php (4 замены)
старый код:
новый код:
Вторая задача решается заменой функции CreateHierarchyDropdown в файле Class.contentoperations.inc.php
Как пользоваться (необходимы права админа):
1) Создаем отдельную группу, в настройке прав для нее включаем два пункта: "Add Pages", "Advanced usage of the the File Manager module"
2) Для открытия доступа к нужному разделу выбираем разводящую страницу раздела и включаем группу в "Дополнительные редакторы" во вкладке "Опции". Так как права наследуются всеми потомками - группа получит управление над всеми страницами раздела
При возникновении ошибок и вопросов - пишите в личку.
Распишем необходимые доработки стандартного функционала управление правами:
1) При установке прав через опцию "дополнительные редакторы" права должны наследоваться всеми потомками.
2) При создании и редактировании в качестве родителей можно указать только страницы, на изменения которых пользователь имеет право.
Для решения первой задачи необходимо заменить функцию SetAdditionalEditors в файле Class.content.inc.php
Code: Select all
function SetAdditionalEditors($editorarray, $current = '')
{
/* if ($current = '')
{ */
$allcontent =& ContentOperations::GetAllContent();
global $gCms, $sql_queries, $debug_errors;
$db = &$gCms->GetDb();
if ($allcontent !== FALSE && count($allcontent) > 0)
{
foreach ($allcontent as $one)
{
$curhierarchy = $one->Hierarchy();
if (!strstr($curhierarchy, $current))
{ continue; }
$query = "DELETE FROM ".cms_db_prefix()."additional_users WHERE content_id = ?";
$db->Execute($query, array($one->Id()));
foreach ($editorarray as $oneeditor)
{
$new_addt_id = $db->GenID(cms_db_prefix()."additional_users_seq");
$query = "INSERT INTO ".cms_db_prefix()."additional_users (additional_users_id, user_id, content_id) VALUES (?,?,?)";
$db->Execute($query, array($new_addt_id, $oneeditor, $one->Id()));
}
}
}
/* }
else {$this->mAdditionalEditors = $editorarray;} */
}
старый код:
Code: Select all
$contentobj->SetAdditionalEditors($addtarray);
Code: Select all
$contentobj->SetAdditionalEditors($addtarray, $contentobj->Hierarchy());
Вторая задача решается заменой функции CreateHierarchyDropdown в файле Class.contentoperations.inc.php
Code: Select all
function CreateHierarchyDropdown($current = '', $parent = '', $name = 'parent_id', $allowcurrent = 0)
{
$result = '';
$allcontent =& ContentOperations::GetAllContent();
if ($allcontent !== FALSE && count($allcontent) > 0)
{
$result .= '<select name="'.$name.'">';
#Если нет глобальных прав - лесом
$permission = check_permission($userid, 'Modify Any Page');
if($permission) {$result .= '<option value="-1">'.lang('none').'</option>';}
$curhierarchy = '';
foreach ($allcontent as $one)
{
$value = $one->Id();
if ($one->Id() == $current)
{
#Grab hierarchy just in case we need to check children
#(which will always be after)
$curhierarchy = $one->Hierarchy();
if( !$allowcurrent )
{
// Then jump out. We don't want ourselves in the list.
continue;
}
$value = -1;
}
#If it's a child of the current, we don't want to show it as it
#could cause a deadlock.
if (!$allowcurrent && $curhierarchy != '' && strstr($one->Hierarchy() . '.', $curhierarchy . '.') == $one->Hierarchy() . '.')
{
continue;
}
# Если не автор и не редактор - пропускаем
$permission = (check_ownership($userid, $one->Id()) || check_authorship($userid, $one->Id()));
if(!$permission) {continue;}
#Don't include content types that do not want children either...
if ($one->WantsChildren() == true)
{
$result .= '<option value="'.$value.'"';
#Select current parent if it exists
if ($one->Id() == $parent)
{
$result .= ' selected="selected"';
}
if( $value == -1 )
{
$result .= '>'.$one->Hierarchy().'. - '.$one->Name().' ('.lang('invalid').')</option>';
}
else
{
$result .= '>'.$one->Hierarchy().'. - '.$one->Name().'</option>';
}
}
}
$result .= '</select>';
}
return $result;
}
Как пользоваться (необходимы права админа):
1) Создаем отдельную группу, в настройке прав для нее включаем два пункта: "Add Pages", "Advanced usage of the the File Manager module"
2) Для открытия доступа к нужному разделу выбираем разводящую страницу раздела и включаем группу в "Дополнительные редакторы" во вкладке "Опции". Так как права наследуются всеми потомками - группа получит управление над всеми страницами раздела
При возникновении ошибок и вопросов - пишите в личку.
Re: Вопрос по настройке прав пользователей
Вау, круто! По-моему, наследование прав на подразделы - это очень хорошая и правильная идея, а уж то, что ты её и реализовал к тому же вообще замечательно. Можешь оформить в виде диффа и с комментариями на английском закинуть в багтрекер?
Я тут боролся пока за исправления в модуле фидов, чтобы фиды валидировались, вроде пробил своё решение. Ещё бы SEO-патч от Сони и Хамстера пробить
там в теме по 1.5 обсуждали, alby какие-то проблемы нашел. На всё рук не хватает.
Я тут боролся пока за исправления в модуле фидов, чтобы фиды валидировались, вроде пробил своё решение. Ещё бы SEO-патч от Сони и Хамстера пробить

unsigned double ZYV;
Re: Вопрос по настройке прав пользователей
Сначала думаю обкатать изменения - есть ощущение, что криво реализованоZYV wrote: Вау, круто! По-моему, наследование прав на подразделы - это очень хорошая и правильная идея, а уж то, что ты её и реализовал к тому же вообще замечательно. Можешь оформить в виде диффа и с комментариями на английском закинуть в багтрекер?
Я тут боролся пока за исправления в модуле фидов, чтобы фиды валидировались, вроде пробил своё решение. Ещё бы SEO-патч от Сони и Хамстера пробитьтам в теме по 1.5 обсуждали, alby какие-то проблемы нашел. На всё рук не хватает.

Еще думаю добавить:
1) наследование родительских прав при создании страницы. Создатель страницы получит эти права автоматически, так как будет являться ее создателем. А вот другие аккаунты группы, а так же другие группы, указанные в "Доп редакторах", останутся безправными.
2) сейчас все старые права удаляются, хорошо бы реализовать опцию "установить новые/добавить к существующим правам"