直接用authz文件可实现目录级权限控制,关键在于理清路径、用户组和继承关系;需正确定义无空格的用户组、带仓库名的路径规则、显式设计权限继承与覆盖,并注意utf-8无bom编码及@符号引用组名。

直接用authz文件就能实现目录级权限控制,关键不是写几行规则,而是理清路径、用户组和继承关系这三个支点。配置本身不难,但逻辑错一环,权限就容易失效或越权。
先定义好用户组,别让权限散落在单个用户名上
在authz文件开头的[groups]段里,把职能相近的人归成组,比如开发、测试、文档维护人员。组名不能带空格或特殊字符,成员之间用英文逗号紧挨着写,中间不留空格。
- 正确写法:[groups] dev_team = alice,bob,testers = charlie,david
- 错误写法:dev team = alice, bob(空格导致解析失败)
- 组可以嵌套:比如leads = @dev_team,@testers,方便统一授权
路径规则要带仓库名或明确范围,避免权限错配
权限不是全局生效的,必须指定作用范围。常见写法有三种:
- [/]:对所有仓库的根目录生效(慎用)
- [repo_name:/trunk]:只对名为repo_name的仓库中/trunk路径起作用
- [/project/docs]:对所有仓库里叫/project/docs的路径统一授权
多仓库环境下,强烈建议用带仓库名的写法,避免不同项目间权限互相干扰。
权限继承与覆盖要主动设计,别靠默认猜
SVN默认按“从父到子”继承权限,但你可以用更细的路径显式覆盖。比如:
- [/]下设@dev_team = r,整个仓库只读
- 再加一行[/trunk/src]下设@dev_team = rw,就只放开这个子目录的写权限
- 若想彻底屏蔽某路径,用* =(留空)+单独放行管理员:admin = rw
注意:子路径规则优先级高于父路径,且大小写敏感,路径末尾不加斜杠。
中文路径和编码细节不能忽略
如果仓库里有中文目录,比如[/项目/核心模块],authz文件必须保存为UTF-8无BOM格式,否则SVN读取会乱码或报错。Windows记事本默认带BOM,建议用VS Code或Notepad++另存为UTF-8(无签名)。
- 路径中可直接写中文,无需编码转义
- 每行配置必须顶格,开头不能有空格或tab
- 组名引用必须加@符号,如@dev_team,否则当成普通用户名处理











