Hello! On Tue, Apr 14, 2015 at 03:38:11PM -0400, itcod wrote:
> "Реальнее - использовать средства контроля доступа, см. выше." > > Максим спасибо. > Из всех перечисленных вами средств похоже только limit_except по описанию > может раздельно влиять > на методы применяемые в WEBDAV (DELETE, MKCOL, COPY, MOVE, OPTIONS, > PROPFIND) Вам кажется. Контроль доступа в зависимости от метода можно делать, помимо limit_except, ещё как минимум с помощью директив модуля rewrite: if ($request_method = POST) { return 403; } Не говоря уже о выгрузке логики доступа в скриптовые языки (perl, тот же lua) или вообще на бекенды с помощью auth_request. > Задача тривиальна при изменении переменной (она изменяется из программы lua) > разрешить или блокировать метод GET. Создал для проверки конструкцию > > set $limit_get all; > limit_except GET { > deny $limit_get all; > } > Получил ошибку: > nginx: [emerg] invalid parameter "limit_get" .... > > Вывод1. Средство контроля не знает переменных и не может в зависимости от > внешних условий (прав пользователя) заблокировать/разблокировать метод. Ваша проблема в том, что вы упорно пытаетесь использовать переменные там, где они не поддерживаются. Повторю: переменные поддерживают только некоторые директивы nginx'а. BTW, если в какой-либо директиве можно использовать переменные - это явно указано в документации. > Вывод2. Перечисленные вами средства контроля не решают задачи динамической > установки доступных пользователю(имя:пароль) методов (прав доступа). См. выше, вам кажется. > Я пока не вижу способа запретить ему создавать каталоги или стирать файлы > если он зашёл в папку.... и это приводит нас к однопользовательской системе > алядос... может я чего то не вижу ? может где то есть эта возможность > динамически управлять методами(правами). Всё таки хочется сделать > простенькую полноценную систему управления доступом к файлам в webdav... Если данные о том, можно что-то пользователю или нет - из скриптового языка, то проще всего вашу задачу решить с помощью скриптового языка же, вернув ошибку непосредственно из него. Тривиальный авторизатор на auth_basic, требующий от всех пользователей ввода логина/пароля, и разрешающий некоторым из них методы, отличные от GET, делается как-то так: server { listen 80; server_name dav.example.com; location / { auth_basic "restricted site"; auth_basic_user_file /path/to/users; dav_methods PUT DELETE; limit_except GET { auth_basic "restricted site"; auth_basic_user_file /path/to/admins; } ... } } -- Maxim Dounin http://nginx.org/ _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru