Как настроить параметры управления доступом нескольких пользователей с помощью расширения acl в репозитории Mercurial

У меня есть основной репозиторий mercurial (A) с двумя папками "depot1" и "depot2" на компьютере с Windows.

Следующая конфигурация выполняется в файле .hg/hgrc репозитория A.

[ui]
username = praveen

[extensions]
hgext.acl=

[hooks]
changegroup.update = hg update
pretxnchangegroup.acl = python:hgext.acl.hook

[acl]
sources = serve push pull commit

Затем я создал 2 клона меркуриального репозитория A. X и Y на компьютерах с Windows

Файл X .hg/hgrc:

[ui]
username = clone1

Да .hg/hgrc файл:

[ui]
username = clone2

My Question: 
1- Restrict all push operations from user="clone2".
2- user="clone1" will be able to perform push on only "depot1".

Пожалуйста, предложите мне, как такая конфигурация возможна.

Спасибо,

Правин


person praveen    schedule 11.11.2009    source источник


Ответы (1)


К сожалению, вы неправильно понимаете, что делает username в разделе [ui]. Это строго клиентская настройка, которая гласит: «Если сервер запрашивает у меня имя пользователя для аутентификации, вот что я хочу отправить», поэтому то, что у вас есть в ui.username в репозиториях A, X и Y, не повлияет на то, какой удаленный пользователи могут использовать эти репозитории.

Вместо этого вам нужно использовать разделы [acl.allow] и [acl.deny] в файлах .hg/hgrc репозиториев Y и X, чтобы указать для них элементы управления доступом.

Имена пользователей, которые вы используете в этих разделах («clone1» и «clone2») в ваших примерах, также должны поддерживаться реальной системой аутентификации. Встроенный hg-serve не предоставляет его, поэтому вам нужно использовать либо ssh, либо Apache/ISS с hgweb или hgwebdir. Подробный обзор см. на странице публикации репозиториев.

person Ry4an Brase    schedule 11.11.2009
comment
Не могли бы вы сослаться на любую хорошую документацию о том, как настроить [acl.allow]/[acl.deny] и [allow_push] в репозиториях mercurial. - person praveen; 12.11.2009
comment
Вики-страница AclExtension mercurial.selenic.com/wiki/AclExtension объясняет [acl.allow] и [аккл.запретить]. Однако вам нужно понимать, что у mercurial нет собственной пользовательской базы данных. Он использует пользовательскую систему вашей (1) операционной системы, (2) ssh author_keys или (3) области аутентификации веб-сервера HTTP. Тот, который он использует, зависит от того, как вы получаете доступ к mercurial (ssh или http). вы используете ssh: URL-адреса или http: URL-адреса? Где вы создаете свои учетные записи пользователей? - person Ry4an Brase; 12.11.2009
comment
У меня есть установка mercurial на компьютере с Windows, и в настоящее время я использую hg serve для публикации моего единственного репозитория mercurial. репозитории клонов (каждый пользователь имеет один клон на своем локальном компьютере с Windows) - person praveen; 13.11.2009
comment
Вы не сможете делать нужные вам разрешения, используя «hg serve». «hg serve» — это встроенный инструмент, позволяющий людям быстро получать ваши изменения или видеть, что вы делаете. У него нет аутентификации пользователя или учетных данных. Вам нужно посмотреть ссылку на репозитории публикации в моем первоначальном ответе и настроить что-то более формальное, чтобы ограничить определенных пользователей определенными репозиториями. Вы, вероятно, захотите выбрать одну машину для обслуживания всех трех репозиториев через ssh, apache или IIS и позволить пользователям синхронизировать свои локальные клоны X и Y с клонами на этом сервере, доступ к которым имеют только они. - person Ry4an Brase; 13.11.2009