Запрет редактирования заказов определенной группе пользователей

Материал из Umicms
Перейти к:навигация, поиск

Актуально для 2.9.6.


Задача: Требуется определенной группе пользователей дать права только на просмотр заказов, но запретить их редактирование или удаление.

Решение: Так как заказы являются объектами, то с помощью системы прав пользователей запретить их редактирования нельзя, но мы можем написать кастомный макрос, который будет работать на события изменения объектов и проверять группу пользователя. Если пользователь будет в группе с правами только на чтение заказов, то при попытке их редактирования мы будем показывать ошибку.

 В файле __custom_adm.php пишем:
public function editOrderDenied ($event) {
	$mode = $event->getMode();
	if ($mode == 'before'){
		$subject = $event->getRef('object');
		if( !($subject instanceof umiObject) ) {
			$subject = $event->getRef('entity');
			
		}
		$typesCollection = umiObjectTypesCollection::getInstance();
		$umiHierarchy = umiHierarchy::getInstance();
		$subjectTypeId = $subject->getTypeId();
		$subjectType = $typesCollection->getType($subjectTypeId);
		$subjectModule = $subjectType->getModule();
		$subjectMethod = $subjectType->getMethod();
		if ($subjectModule == 'emarket' && $subjectMethod == 'order'){
			$user_id = permissionsCollection::getInstance()->getUserId();
			$user_object = umiObjectsCollection::getInstance()->getObject($user_id);
			$groups = $user_object->getValue("groups");
			foreach ($groups as $val) {
			  if ($val == 1) {
				$this->errorNewMessage(getLabel("error-require-edit-permissions"));
				$this->errorPanic();
			  }
			}
		
		}
	}

}

В фрагменте кода if ($val == 1) { мы проверяем равенство с ID запрещаемой группой пользователей. В файле custom_events.php пропишем события:

<?php

	new umiEventListener('systemModifyObject', 'emarket', 'editOrderDenied');
	new umiEventListener('systemDeleteObject', 'emarket', 'editOrderDenied');
	new umiEventListener('systemModifyPropertyValue', 'emarket', 'editOrderDenied');


?>