• Модуль: sender
  • Путь к файлу: ~/bitrix/modules/sender/lib/security/role/manager.php
  • Класс: BitrixSenderSecurityRoleManager
  • Вызов: Manager::setRolePermissions
static function setRolePermissions($roleId = null, array $roleFields = [], array $permissions)
{
	$roleId = (int) $roleId;
	if ($roleId <= 0 && empty($roleFields))
	{
		throw new ArgumentException('Role id should be greater than zero', 'roleId');
	}

	if(RoleTable::getRowById($roleId))
	{
		if (!empty($roleFields))
		{
			$result = RoleTable::update($roleId, $roleFields);
			if (!$result->isSuccess())
			{
				return $result;
			}
		}
	}
	else
	{
		$result = RoleTable::add($roleFields);
		if (!$result->isSuccess())
		{
			return $result;
		}

		$roleId = $result->getId();
	}

	$normalizedPermissions = Permission::normalize($permissions);
	ModelRolePermissionTable::deleteByRoleId($roleId);
	foreach ($normalizedPermissions as $entity => $actions)
	{
		foreach ($actions as $action => $permission)
		{
			$result = ModelRolePermissionTable::add(array(
				'ROLE_ID' => $roleId,
				'ENTITY' => $entity,
				'ACTION' => $action,
				'PERMISSION' => $permission
			));
			if (!$result->isSuccess())
			{
				return $result;
			}
		}
	}

	self::clearMenuCache();
	$result = new AddResult();
	$result->setId($roleId);
	return $result;
}