Вопрос по настройке прав пользователей

Обсуждение CMS Made Simple в России.

Moderators: iturbay, wdwp

Post Reply
raunlach
New Member
New Member
Posts: 8
Joined: Fri Nov 14, 2008 3:21 pm

Вопрос по настройке прав пользователей

Post by raunlach »

Задача: распределить права на редактирование контента.

Под логином админа создаю тексты. Во второй вкладке "Опции" отмечаю "дополнительных редакторов".

После этого пользователь, не отмеченный как  "дополнительный редактор" свободно изменяет контент.

Вопрос:
1) служит ли раздел "дополнительные редакторы" для распределения прав на редактирование контента?
2) есть ли модули, позволяющие гибко настраивать права пользователей на просмотр-редактирования как в открытой, так и закрытой (админ) части сайта?
ZYV
Language Partners
Language Partners
Posts: 868
Joined: Tue Nov 15, 2005 9:08 pm

Re: Вопрос по настройке прав пользователей

Post by ZYV »

1) Вообще служит, только я сам не пробовал никогда, видимо для этого флаг редактирования любого контента у этого редактора должен быть выключен?!

2) Для фронт-энда - FEU, в общем-то можно реализовать что угодно. Для бэкэнда не припоминается, может быть кто подскажет.
unsigned double ZYV;
raunlach
New Member
New Member
Posts: 8
Joined: Fri Nov 14, 2008 3:21 pm

Re: Вопрос по настройке прав пользователей

Post by raunlach »

ZYV wrote: 1) Вообще служит, только я сам не пробовал никогда, видимо для этого флаг редактирования любого контента у этого редактора должен быть выключен?!

2) Для фронт-энда - FEU, в общем-то можно реализовать что угодно. Для бэкэнда не припоминается, может быть кто подскажет.
1) Покопался глубже:
Встроенная система распределения прав весьма кривая и по умолчанию отключена (видимо, в виду бесполезности).

Как пользоваться: глобальное управление правами происходит на уровне групп. Для создания ограниченных аккаунтов необходимо привязать их к отдельным группам с активированным "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.
raunlach
New Member
New Member
Posts: 8
Joined: Fri Nov 14, 2008 3:21 pm

Re: Вопрос по настройке прав пользователей

Post by raunlach »

Покапался с FEU (FrontEndUsers)
Модуль предназначен для управления пользователями и группами, а так же обеспечивает механизмы авторизации.

Для разводки прав пользователей на тот или иной функционал требуется дополнительные модули.

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
Но дальше опять ступор - модуль не активируется.
raunlach
New Member
New Member
Posts: 8
Joined: Fri Nov 14, 2008 3:21 pm

Конечное решения

Post by raunlach »

Модулей для БэкЕнда не нашлось, поэтому решил внести изменения в стандартный функционал управления правами.

Распишем необходимые доработки стандартного функционала управление правами:
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;} */
	}
а так же заменить вызов этой функции в файле Editcontent.php (4 замены)
старый код:

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) Для открытия доступа к нужному разделу выбираем разводящую страницу раздела и включаем группу в "Дополнительные редакторы" во вкладке "Опции". Так как права наследуются всеми потомками - группа получит управление над всеми страницами раздела

При возникновении ошибок и вопросов - пишите в личку.
ZYV
Language Partners
Language Partners
Posts: 868
Joined: Tue Nov 15, 2005 9:08 pm

Re: Вопрос по настройке прав пользователей

Post by ZYV »

Вау, круто! По-моему, наследование прав на подразделы - это очень хорошая и правильная идея, а уж то, что ты её и реализовал к тому же вообще замечательно. Можешь оформить в виде диффа и с комментариями на английском закинуть в багтрекер?

Я тут боролся пока за исправления в модуле фидов, чтобы фиды валидировались, вроде пробил своё решение. Ещё бы SEO-патч от Сони и Хамстера пробить :( там в теме по 1.5 обсуждали, alby какие-то проблемы нашел. На всё рук не хватает.
unsigned double ZYV;
raunlach
New Member
New Member
Posts: 8
Joined: Fri Nov 14, 2008 3:21 pm

Re: Вопрос по настройке прав пользователей

Post by raunlach »

ZYV wrote: Вау, круто! По-моему, наследование прав на подразделы - это очень хорошая и правильная идея, а уж то, что ты её и реализовал к тому же вообще замечательно. Можешь оформить в виде диффа и с комментариями на английском закинуть в багтрекер?

Я тут боролся пока за исправления в модуле фидов, чтобы фиды валидировались, вроде пробил своё решение. Ещё бы SEO-патч от Сони и Хамстера пробить :( там в теме по 1.5 обсуждали, alby какие-то проблемы нашел. На всё рук не хватает.
Сначала думаю обкатать изменения - есть ощущение, что криво реализовано  :-\

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

Return to “Russian - русский”