@@ -152,6 +152,104 @@ createPermissionDirective({
152152- ` replace ` :仅对宿主元素内部带标识属性的子元素设置 ` textContent `
153153- ` allow ` :不处理并恢复原始状态
154154
155+ ## API
156+
157+ ### 导出
158+
159+ ``` ts
160+ import { createPermissionDirective , DEFAULT_PERMISSION_REPLACE_ATTR } from ' tml-ui'
161+
162+ import type {
163+ CreatePermissionDirectiveOptions ,
164+ PermissionBehavior ,
165+ PermissionKey ,
166+ PermissionLevel ,
167+ PermissionMode ,
168+ PermissionRule ,
169+ PermissionRules ,
170+ PermissionReplaceOptions ,
171+ ResolvePermission ,
172+ ResolvePermissionResult
173+ } from ' tml-ui'
174+ ```
175+
176+ ### ` createPermissionDirective `
177+
178+ ``` ts
179+ function createPermissionDirective<Level extends PermissionLevel = string >(
180+ options : CreatePermissionDirectiveOptions <Level >
181+ ): import (' vue' ).Directive <HTMLElement , string >
182+ ```
183+
184+ - 指令名:` permission ` (模板中使用 ` v-permission ` )
185+ - 绑定值:` string ` ,作为权限 key (会 ` trim() ` ;空字符串视为未配置,恢复原始状态)
186+ - 参数/ 修饰符:当前版本不使用
187+
188+ ### ` CreatePermissionDirectiveOptions `
189+
190+ ` ` ` ts
191+ export interface CreatePermissionDirectiveOptions<Level extends PermissionLevel = string> {
192+ rules: PermissionRules
193+ resolvePermission: ResolvePermission<Level>
194+ replace?: PermissionReplaceOptions
195+ }
196+ ` ` `
197+
198+ - ` rules ` :权限规则表(key - > rule )
199+ - ` resolvePermission ` :权限解析函数,返回 ` boolean ` 或“等级”
200+ - ` replace.targetAttr ` :自定义替换目标属性名(默认 ` DEFAULT_PERMISSION_REPLACE_ATTR ` )
201+
202+ ### ` ResolvePermission `
203+
204+ ` ` ` ts
205+ export type ResolvePermissionResult<Level extends PermissionLevel = string> = boolean | Level
206+
207+ export type ResolvePermission<Level extends PermissionLevel = string> = (
208+ key: PermissionKey
209+ ) => ResolvePermissionResult<Level>
210+ ` ` `
211+
212+ - 返回 ` true ` :允许(不处理,恢复原始状态)
213+ - 返回 ` false ` :按 ` whenDenied ` 执行
214+ - 返回 ` Level ` :仅当规则配置了 ` byLevel ` 时生效;否则默认不处理(恢复原始状态)
215+
216+ ### 规则结构
217+
218+ ` ` ` ts
219+ export type PermissionMode = 'allow' | 'hide' | 'disable' | 'replace'
220+
221+ export interface PermissionBehavior {
222+ mode: PermissionMode
223+ replaceText?: string
224+ }
225+
226+ export type PermissionByLevelConfig = Partial<Record<string, PermissionBehavior>>
227+
228+ export type PermissionRule =
229+ | { whenDenied: PermissionBehavior }
230+ | { byLevel: PermissionByLevelConfig }
231+ | ({ whenDenied: PermissionBehavior } & { byLevel: PermissionByLevelConfig })
232+
233+ export type PermissionRules = Record<PermissionKey, PermissionRule>
234+ ` ` `
235+
236+ 规则匹配优先级(按实现逻辑):
237+
238+ - ` resolvePermission(key) ` 返回 ` boolean `
239+ - ` true ` :允许
240+ - ` false ` :若配置 ` whenDenied ` 则使用 ` whenDenied ` ,否则不处理
241+ - ` resolvePermission(key) ` 返回 ` Level `
242+ - 若配置 ` byLevel ` :使用 ` byLevel[String(level)] `
243+ - 未配置 ` byLevel ` :不处理
244+
245+ ### ` DEFAULT_PERMISSION_REPLACE_ATTR `
246+
247+ ` ` ` ts
248+ export const DEFAULT_PERMISSION_REPLACE_ATTR = 'data-permission-replace'
249+ ` ` `
250+
251+ - ` replace ` 模式默认会查找宿主元素内部所有带该属性的子元素,并替换其 ` textContent `
252+
155253## 安全说明
156254
157255` replace ` 默认使用 ` textContent ` 写入替换文案,不渲染 HTML ,以避免引入 XSS 风险。
0 commit comments