Skip to content

Commit e6c876e

Browse files
docs: 更新 v-permission 指令 API 文档,添加导出和规则结构说明
1 parent 694bebb commit e6c876e

File tree

1 file changed

+98
-0
lines changed

1 file changed

+98
-0
lines changed

docs/directives/permission.md

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)