Skip to content

Commit c71e8e4

Browse files
CodeCasterXclaude
andcommitted
[claude] 完善文件权限管理规则,使用通用参考文件
将权限管理规则中的参考文件从 pom.xml 改为 README.md,提高规则的通用性。 主要变更: - 使用 README.md 作为参考文件(所有项目都有) - 添加强制执行规则:Write/Edit 后立即修复权限 - 明确禁止硬编码用户名和用户组 - 要求必须动态获取所有者信息 影响范围: - .claude/project-rules.md - 更新权限管理规则 - .claude/commands/fix-permissions.md - 更新命令文档 - .claude/README.md - 更新规则说明 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
1 parent 23483ff commit c71e8e4

File tree

3 files changed

+47
-19
lines changed

3 files changed

+47
-19
lines changed

.claude/README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@
2323

2424
### 规则 1: 文件权限管理
2525
- 所有新建/修改的文件必须设置正确的所有者权限
26-
- 动态从 `pom.xml` 等参考文件获取权限信息
26+
- 动态从 `README.md` 等参考文件获取权限信息
27+
- README.md 是通用文件,适用于所有语言的项目
2728
- 避免硬编码用户名和用户组
2829

2930
### 规则 2: PR 提交规范
@@ -106,7 +107,7 @@
106107
```
107108

108109
**自动化流程:**
109-
1.pom.xml 获取正确的所有者信息
110+
1.README.md 获取正确的所有者信息
110111
2. 扫描所有文件和目录
111112
3. 识别权限不一致的文件
112113
4. 自动修复为正确的所有者

.claude/commands/fix-permissions.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@
77

88
1. **获取参考文件的所有者信息**
99
```bash
10-
ls -l pom.xml | awk '{print $3":"$4}'
10+
ls -l README.md | awk '{print $3":"$4}'
1111
```
12-
- 从项目根目录的 `pom.xml` 动态获取正确的所有者信息
12+
- 从项目根目录的 `README.md` 动态获取正确的所有者信息
13+
- README.md 是所有项目都有的通用文件
1314
- 不硬编码用户名和用户组
1415

1516
2. **统计当前文件权限分布**
@@ -33,7 +34,7 @@
3334
4. **修复文件权限**
3435
```bash
3536
# 获取正确的所有者信息
36-
OWNER_GROUP=$(ls -l pom.xml | awk '{print $3":"$4}')
37+
OWNER_GROUP=$(ls -l README.md | awk '{print $3":"$4}')
3738

3839
# 修复所有文件权限
3940
find . -type f -print0 2>/dev/null | xargs -0 ls -l 2>/dev/null | awk '$3 == "root" {print $9}' | xargs sudo chown $OWNER_GROUP
@@ -62,7 +63,8 @@
6263
根据 `.claude/project-rules.md` 中的规则 1:
6364
- 所有文件必须设置正确的所有者权限
6465
- 不要硬编码用户名和用户组
65-
- 动态从 `pom.xml` 等参考文件获取权限信息
66+
- 动态从 `README.md` 等参考文件获取权限信息
67+
- README.md 是通用文件,适用于所有语言的项目
6668
- 确保用户可以自主修改所有文件
6769

6870
**常见问题:**

.claude/project-rules.md

Lines changed: 38 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
**动态获取权限的方法:**
1212

1313
```bash
14-
# 方法1: 从项目根目录的 pom.xml 获取所有者
15-
REF_FILE="pom.xml" # 或其他稳定存在的文件
14+
# 方法1: 从项目根目录的 README.md 获取所有者
15+
REF_FILE="README.md" # 所有项目都有的通用文件
1616
OWNER=$(ls -l $REF_FILE | awk '{print $3}')
1717
GROUP=$(ls -l $REF_FILE | awk '{print $4}')
1818

@@ -32,22 +32,47 @@ GROUP=$(stat -c "%G" $REF_FILE) # Linux
3232

3333
```bash
3434
# 1. 先获取参考文件的所有者
35-
OWNER_GROUP=$(ls -l pom.xml | awk '{print $3":"$4}')
35+
OWNER_GROUP=$(ls -l README.md | awk '{print $3":"$4}')
3636

3737
# 2. 应用到新文件
3838
sudo chown $OWNER_GROUP <file_path>
3939

4040
# 或者分步执行
41-
OWNER=$(ls -l pom.xml | awk '{print $3}')
42-
GROUP=$(ls -l pom.xml | awk '{print $4}')
41+
OWNER=$(ls -l README.md | awk '{print $3}')
42+
GROUP=$(ls -l README.md | awk '{print $4}')
4343
sudo chown $OWNER:$GROUP <file_path>
4444
```
4545

46+
**⚠️ 强制执行规则(CRITICAL):**
47+
48+
每次使用 `Write``Edit` 工具创建/修改文件后,**必须立即**在同一个响应中使用 `Bash` 工具修复权限。
49+
50+
**标准流程(必须遵循):**
51+
52+
```bash
53+
# 步骤 1: 创建或修改文件
54+
Write(file_path, content) # 或 Edit(...)
55+
56+
# 步骤 2: 立即动态获取正确的所有者并修复权限(在同一个响应中)
57+
Bash("OWNER_GROUP=$(ls -l README.md | awk '{print $3\":\"$4}') && sudo chown $OWNER_GROUP " + file_path)
58+
59+
# 或者批量修复多个文件
60+
Bash("OWNER_GROUP=$(ls -l README.md | awk '{print $3\":\"$4}') && sudo chown $OWNER_GROUP file1 file2 file3")
61+
```
62+
63+
**为什么必须这样做:**
64+
- Write 和 Edit 工具可能会将文件所有者更改为 root
65+
- 这会导致用户无法修改自己的文件
66+
- 必须动态获取权限,不能硬编码用户名
67+
- 必须在工具调用后立即修复,不能延后到下一个响应
68+
4669
**检查清单:**
47-
- [ ] 使用 Write 工具创建新文件后,立即从已有文件获取权限并设置
48-
- [ ] 使用 Edit 工具修改文件时,确认文件所有者与项目其他文件一致
49-
- [ ] 批量创建文件后,统一修改所有权
70+
- [ ] 使用 Write 工具创建新文件后,**立即**在同一响应中动态获取并修复权限
71+
- [ ] 使用 Edit 工具修改文件后,**立即**在同一响应中动态获取并修复权限
72+
- [ ] 批量创建/修改文件后,统一修改所有权
5073
- [ ] 创建目录后,递归修改目录及其内容的所有权
74+
- [ ] 每次修改后验证权限是否正确
75+
- [ ] **绝对不要**硬编码用户名和用户组
5176

5277
**完整示例:**
5378

@@ -58,14 +83,14 @@ Bash("sudo chown jiyujie:staff " + file_path) # 在其他人电脑上会失败
5883

5984
# ✅ 正确做法:动态获取权限
6085
Write(file_path, content)
61-
# 从项目根目录的 pom.xml 获取所有者信息
62-
Bash("OWNER_GROUP=$(ls -l pom.xml | awk '{print $3\":\"$4}') && sudo chown $OWNER_GROUP " + file_path)
86+
# 从项目根目录的 README.md 获取所有者信息
87+
Bash("OWNER_GROUP=$(ls -l README.md | awk '{print $3\":\"$4}') && sudo chown $OWNER_GROUP " + file_path)
6388

6489
# ✅ 更简洁的做法:批量处理
6590
Write(file1, content1)
6691
Write(file2, content2)
6792
Write(file3, content3)
68-
Bash("OWNER_GROUP=$(ls -l pom.xml | awk '{print $3\":\"$4}') && sudo chown $OWNER_GROUP file1 file2 file3")
93+
Bash("OWNER_GROUP=$(ls -l README.md | awk '{print $3\":\"$4}') && sudo chown $OWNER_GROUP file1 file2 file3")
6994
```
7095

7196
## Pull Request 提交规范
@@ -201,8 +226,8 @@ mvn test
201226
# 检查文件权限
202227
ls -l <file>
203228
204-
# 动态修改文件权限(从 pom.xml 获取所有者)
205-
OWNER_GROUP=$(ls -l pom.xml | awk '{print $3":"$4}')
229+
# 动态修改文件权限(从 README.md 获取所有者)
230+
OWNER_GROUP=$(ls -l README.md | awk '{print $3":"$4}')
206231
sudo chown $OWNER_GROUP <file>
207232
```
208233

0 commit comments

Comments
 (0)