@mattbe

Как установить права файлу на диске?

В оф.доке есть пример задания прав на папку, но я так понимаю он не работает для файлов. Если задать права для родительской папки, то на файл права не наследуются.
В коробке использую такой вариант, но получается работает только для папок. Если потом переместить файл в эту папку, то права наследуются, но это какой-то костыль получается. Как сразу установить права на файл?

\Bitrix\Main\Loader::includeModule('disk');
if (\Bitrix\Main\Loader::includeModule('disk')) {

$rootActivity = $this->GetRootActivity();
$id_folder = $rootActivity->GetVariable("id_folder"); // получаем из переменной id папки.

$rightsManager = \Bitrix\Disk\Driver::getInstance()->getRightsManager(); 
$accessTaskId = $rightsManager->getTaskIdByName($rightsManager::TASK_READ); // устанавливаемые права (чтение)
$folder = \Bitrix\Disk\Folder::loadById($id_folder); // id папки
if ($folder) {
    $rightsManager = \Bitrix\Disk\Driver::getInstance()->getRightsManager();
    $newRights = array(
        array(
			//'NEGATIVE' => true,		// если надо удалить права на папку
			'ACCESS_CODE' => 'AU', 	// все авторизованные пользователи
			'TASK_ID' => $accessTaskId 
        ),
    );
    $rightsManager->append($folder->getRealObject(), $newRights);
	$this->WriteToTrackingService("Для папки с id " . $id_folder . " установлены права на чтение."); 
}
else 
{ 
	$this->WriteToTrackingService("Ошибка установки прав для папки с id " . $id_folder . "."); 
}
}
  • Вопрос задан
  • 123 просмотра
Решения вопроса 1
@mattbe Автор вопроса
\Bitrix\Main\Loader::includeModule('disk');
if (\Bitrix\Main\Loader::includeModule('disk')) {

$rootActivity = $this->GetRootActivity();
$id_folder = $rootActivity->GetVariable("id_folder"); // получаем из переменной id папки.
$id_file = $rootActivity->GetVariable("id"); // получаем из переменной id файла.

$rightsManager = \Bitrix\Disk\Driver::getInstance()->getRightsManager(); 
$accessTaskId = $rightsManager->getTaskIdByName($rightsManager::TASK_READ); // устанавливаемые права (чтение)
$folder = \Bitrix\Disk\Folder::loadById($id_folder); // id папки
if ($folder) {
    $rightsManager = \Bitrix\Disk\Driver::getInstance()->getRightsManager();
    $newRights = array(
        array(
			//'NEGATIVE' => true,	// если надо удалить права на папку
			'ACCESS_CODE' => 'AU', 	// все авторизованные пользователи
			'TASK_ID' => $accessTaskId 
        ),
    );
    $rightsManager->append($folder->getRealObject(), $newRights);
    $this->WriteToTrackingService("Для папки с id " . $id_folder . " установлены права на чтение."); 

//устанавливаем права на файл
$file = \Bitrix\Disk\File::loadById($id_file);

$rightsManager = \Bitrix\Disk\Driver::getInstance()->getRightsManager();
$arRights = \Bitrix\Disk\Driver::getInstance()->getRightsManager()->getSpecificRights($folder->getRealObject()); // узнаем права на папку

$rightsManager->set($file, $arRights); //устанавливаем такие же права на файл как папке
$this->WriteToTrackingService("Для файла с id " . $id_file . " установлены права на чтение."); 
}
else 
{ 
    $this->WriteToTrackingService("Ошибка установки прав для папки с id " . $id_folder . "."); 
    $this->WriteToTrackingService("Ошибка установки прав для файла с id " . $id_file . "."); 
}
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы