MCPcopy Create free account
hub / github.com/Louisym/MiniCC / PermissionPolicy

Class PermissionPolicy

tutorials/04_permission_system.py:140–238  ·  view source on GitHub ↗

权限策略 —— 决定哪些工具可以执行。 对应源码: permissions.rs:49-134

Source from the content-addressed store, hash-verified

138# 3. authorize() 方法:判断某个工具能否执行
139
140class PermissionPolicy:
141 """
142 权限策略 —— 决定哪些工具可以执行。
143
144 对应源码: permissions.rs:49-134
145 """
146
147 def __init__(self, active_mode: PermissionMode | str):
148 """
149 参数:
150 active_mode: 当前的权限模式
151 可以是 PermissionMode 枚举值
152"prompt"(每次询问) / "allow"(全部允许)
153 """
154 self.active_mode = active_mode
155 # 每个工具需要的权限等级
156 # 默认所有工具都需要最高权限,然后逐个设置
157 self._tool_requirements: dict[str, PermissionMode] = {}
158
159 def with_tool_requirement(self, tool_name: str, required_mode: PermissionMode) -> "PermissionPolicy":
160 """
161 设置某个工具需要的权限等级。
162
163 链式调用:policy.with_tool_requirement("bash", DANGER).with_tool_requirement("read", READ)
164 """
165 self._tool_requirements[tool_name] = required_mode
166 return self
167
168 def required_mode_for(self, tool_name: str) -> PermissionMode:
169 """查询某个工具需要什么权限"""
170 return self._tool_requirements.get(tool_name, PermissionMode.DANGER_FULL_ACCESS)
171
172 def authorize(
173 self,
174 tool_name: str,
175 tool_input: str,
176 prompter: Optional[PermissionPrompter] = None,
177 ) -> tuple[bool, str]:
178 """
179 判断某个工具是否可以执行。
180
181 核心逻辑(和 Claude Code 源码一致):
182 1. 如果是 "allow" 模式 → 直接允许
183 2. 如果当前权限 >= 需要的权限 → 允许
184 3. 如果当前权限不够但可以询问 → 问用户
185 4. 否则 → 拒绝
186
187 返回:
188 (是否允许, 原因说明)
189
190 对应源码: permissions.rs:89-134
191 """
192 # 情况 1: allow 模式,全部放行
193 if self.active_mode == ALLOW_MODE:
194 return (True, "allow mode: all tools permitted")
195
196 required = self.required_mode_for(tool_name)
197

Callers 1

mainFunction · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected