Могу ли я запретить пользователям удалять файлы с сервера, используя TortoiseSVN и RapidSVN?

Когда пользователь использует TortoiseSVN и RapidSVN, он видит файлы такими, как они есть на сервере, и, таким образом, имеет возможность их удалять. Я хочу предотвратить это. Может быть, заблокировать возможность удаления?

Чтобы уточнить, я хочу, чтобы единственный способ удаления файла с сервера состоял в том, что пользователь удаляет его со своего локального диска, а затем фиксирует его на сервере. Я хочу ограничить возможность любого пользователя удалять напрямую с сервера.

2 ответа

Попытка предотвратить что-либо на стороне клиента, как всегда, небезопасна. Ваши пользователи всегда могут использовать другой клиент.

Таким образом, вам нужно управлять правами доступа на стороне сервера (в самом репозитории). К сожалению, насколько я знаю, SVN изначально поддерживает только уровни доступа "чтение" и "запись". Предоставление кому-либо доступа для "записи" означает, что пользователь может не только изменять существующие файлы, но также добавлять новые файлы и удалять существующие.

Возможно, вы сможете добавить эту функциональность через хук перед фиксацией.

Предотвратить удаление, добавив хук pre-commit. В Windows это можно сделать, добавив pre-commit.bat в "Your_SVN_repository\hooks\" со следующим содержимым.

@echo off
::
:: Stops commits that have deleted/renamed/moved files/folders.
::

setlocal

rem Subversion sends through the path to the repository and transaction id
set REPOS=%1
set TXN=%2

rem check for an delete command in commit
svnlook changed %REPOS% -t %TXN% | findstr /i /m /b D > nul

if %errorlevel% gtr 0  exit 0 else (goto err)

:err
echo. 1>&2
echo Your commit includes files/folder deleted or renamed from repository 1>&2
echo Deletion/Rename is not allowed from repository>&2
echo Please revert the deletion/rename changes 1>&2
exit 1

Другие вопросы по тегам