@lark-apaas/auth-sdk 0.1.0-alpha.6 → 0.1.0-alpha.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +99 -75
- package/lib/AuthProvider.d.ts +14 -4
- package/lib/AuthProvider.d.ts.map +1 -1
- package/lib/AuthProvider.js +30 -6
- package/lib/index.d.ts +3 -4
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +3 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
# @lark-apaas/auth-sdk
|
|
2
2
|
|
|
3
3
|
基于 CASL 的前端鉴权 SDK,封装了权限数据获取、Ability 初始化与 React 集成,帮助你在应用中便捷地做「功能级/按钮级/菜单级/页面级」的权限控制。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## 安装
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
8
|
npm i @lark-apaas/auth-sdk
|
|
@@ -10,7 +10,9 @@ npm i @lark-apaas/auth-sdk
|
|
|
10
10
|
yarn add @lark-apaas/auth-sdk
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
## 快速开始
|
|
14
|
+
|
|
15
|
+
### 模版接入
|
|
14
16
|
|
|
15
17
|
```tsx
|
|
16
18
|
import React from 'react';
|
|
@@ -31,37 +33,114 @@ export default function App() {
|
|
|
31
33
|
</AuthProvider>
|
|
32
34
|
);
|
|
33
35
|
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### 开发组件 - 使用 Can 组件
|
|
39
|
+
|
|
40
|
+
```tsx
|
|
41
|
+
import { CanRole } from '@lark-apaas/auth-sdk';
|
|
34
42
|
|
|
35
43
|
function Home() {
|
|
36
|
-
const ability = useAuthAbility();
|
|
37
44
|
return (
|
|
38
45
|
<div>
|
|
39
|
-
<
|
|
46
|
+
<CanRole roles={['role_admin']}>
|
|
47
|
+
<div>管理员按钮</div>
|
|
48
|
+
</CanRole>
|
|
49
|
+
<CanRole roles={['role_admin', 'role_editor']}>
|
|
50
|
+
<div>编辑按钮</div>
|
|
51
|
+
</CanRole>
|
|
52
|
+
</div>
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### 开发组件 - 使用 AbilityContext 处理复杂场景
|
|
58
|
+
|
|
59
|
+
```tsx
|
|
60
|
+
import { useContext } from 'react';
|
|
61
|
+
import { AbilityContext, ROLE_SUBJECT } from '@lark-apaas/auth-sdk';
|
|
62
|
+
|
|
63
|
+
function Home() {
|
|
64
|
+
const ability = useContext(AbilityContext);
|
|
65
|
+
return (
|
|
66
|
+
<div>
|
|
67
|
+
{ability.can('role_admin', ROLE_SUBJECT) || ability.can('role_editor', ROLE_SUBJECT) ? (
|
|
40
68
|
<div>可见的仪表盘</div>
|
|
41
|
-
|
|
42
|
-
<button disabled={ability.cannot('reader', '@role')}>创建任务</button>
|
|
69
|
+
) : null}
|
|
43
70
|
</div>
|
|
44
71
|
);
|
|
45
72
|
}
|
|
46
73
|
```
|
|
47
74
|
|
|
75
|
+
### 开发组件 - 进阶示例
|
|
76
|
+
|
|
77
|
+
### 菜单按权限过滤
|
|
78
|
+
|
|
79
|
+
```tsx
|
|
80
|
+
import { useContext } from 'react';
|
|
81
|
+
import { AbilityContext } from '@lark-apaas/auth-sdk';
|
|
82
|
+
|
|
83
|
+
const menus = [
|
|
84
|
+
{ name: 'Dashboard', path: '/dashboard', p: { action: 'role_admin', subject: '@role' } },
|
|
85
|
+
{ name: 'Users', path: '/users', p: { action: 'role_editor', subject: '@role' } },
|
|
86
|
+
{ name: 'Settings', path: '/settings', p: { action: 'role_admin', subject: '@role' } },
|
|
87
|
+
];
|
|
88
|
+
|
|
89
|
+
function Nav() {
|
|
90
|
+
const ability = useContext(AbilityContext);
|
|
91
|
+
return (
|
|
92
|
+
<nav>
|
|
93
|
+
{menus.map(m => ability.can(m.p.action, m.p.subject) && (
|
|
94
|
+
<a key={m.path} href={m.path}>{m.name}</a>
|
|
95
|
+
))}
|
|
96
|
+
</nav>
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
48
101
|
---
|
|
49
102
|
|
|
50
|
-
## 核心 API
|
|
103
|
+
## 核心 API - 面向 Agent
|
|
104
|
+
|
|
105
|
+
### CanRole 组件 (推荐)
|
|
106
|
+
|
|
107
|
+
- **作用**: 条件渲染,只有当角色 id 包含在 `roles` 中时才渲染子内容。
|
|
108
|
+
|
|
109
|
+
```tsx
|
|
110
|
+
<CanRole roles={['role_admin', 'role_editor']}>
|
|
111
|
+
<button>删除任务</button>
|
|
112
|
+
</CanRole>
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### AbilityContext 提供原子化的权限判断能力
|
|
116
|
+
|
|
117
|
+
- **作用**: 从 React 上下文获取 CASL `Ability` 实例,使用 `ability.can(action, subject)` 做权限判断。
|
|
118
|
+
|
|
119
|
+
```tsx
|
|
120
|
+
import { useContext } from 'react';
|
|
121
|
+
import { AbilityContext } from '@lark-apaas/auth-sdk';
|
|
122
|
+
|
|
123
|
+
const ability = useContext(AbilityContext);
|
|
124
|
+
const canCreate = ability.can('role_editor', '@role');
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## 核心 API - 面向接入方
|
|
51
128
|
|
|
52
129
|
### AuthProvider
|
|
130
|
+
|
|
53
131
|
- **作用**: 提供 `Ability` 与权限状态上下文,自动/手动拉取权限。
|
|
54
132
|
- **Props**:
|
|
55
133
|
- `config?: AuthSdkConfig`
|
|
134
|
+
- `enable?: boolean` 是否启用权限 SDK,默认 false
|
|
56
135
|
- `permissionApi?: PermissionApiConfig` 拉取权限接口配置
|
|
57
136
|
- `timeout?: number`,默认 5000ms
|
|
58
137
|
- `headers?: Record<string,string>` 自定义请求头
|
|
59
|
-
- `enable?: boolean` 是否启用权限 SDK,默认 false
|
|
60
138
|
- `onError?: (error: Error) => void`
|
|
61
139
|
- `onSuccess?: (data: PermissionApiResponse) => void`
|
|
62
140
|
- `children: React.ReactNode`
|
|
63
141
|
|
|
64
142
|
示例:
|
|
143
|
+
|
|
65
144
|
```tsx
|
|
66
145
|
<AuthProvider config={{
|
|
67
146
|
enable: true,
|
|
@@ -71,36 +150,10 @@ function Home() {
|
|
|
71
150
|
</AuthProvider>
|
|
72
151
|
```
|
|
73
152
|
|
|
74
|
-
|
|
75
|
-
- **作用**: 访问权限状态与方法。
|
|
76
|
-
- **返回**:
|
|
77
|
-
- `ability: Ability` CASL `Ability` 实例
|
|
78
|
-
- `isLoading: boolean` 是否正在加载权限数据
|
|
79
|
-
- `error: Error | null` 最近一次加载错误(如果有)
|
|
80
|
-
- `fetchPermissions(userId?: string): Promise<void>` 手动拉取权限数据
|
|
81
|
-
|
|
82
|
-
```tsx
|
|
83
|
-
const { ability, isLoading, error, fetchPermissions } = useAuth();
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
### useAuthAbility
|
|
87
|
-
- **作用**: 获取 CASL `Ability` 实例,使用 `ability.can(action, subject)` 做任意判断。
|
|
88
|
-
|
|
89
|
-
```tsx
|
|
90
|
-
const ability = useAuthAbility();
|
|
91
|
-
const canCreate = ability.can('Editor', '@role');
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
### Can 组件(来自 @casl/react 的 Contextual Can)
|
|
95
|
-
- **作用**: 条件渲染,只有当 `I` 对 `a` 可操作时才渲染子内容;也支持 render prop。
|
|
96
|
-
|
|
97
|
-
```tsx
|
|
98
|
-
<Can I="Editor" a="@role">
|
|
99
|
-
<button>删除任务</button>
|
|
100
|
-
</Can>
|
|
101
|
-
```
|
|
153
|
+
## 核心 API - 面向 SDK 开发者
|
|
102
154
|
|
|
103
155
|
### PermissionClient
|
|
156
|
+
|
|
104
157
|
- **作用**: 独立的权限数据获取客户端,供非 React 场景(或自定义状态管理)使用。
|
|
105
158
|
- **方法**:
|
|
106
159
|
- `constructor(config?: PermissionApiConfig)`
|
|
@@ -116,6 +169,7 @@ const data = await client.fetchPermissions('user-123');
|
|
|
116
169
|
```
|
|
117
170
|
|
|
118
171
|
### 能力工厂(与 CASL 交互)
|
|
172
|
+
|
|
119
173
|
- `createAbility({ permissions?: Permission[], roles?: string[] }): Ability`
|
|
120
174
|
- `updateAbility(ability: Ability, { permissions?: Permission[], roles?: string[] }): void`
|
|
121
175
|
- `convertPermissionsToRules(permissions: Permission[], roles: string[]): CaslRule[]`
|
|
@@ -133,50 +187,20 @@ updateAbility(ability, { permissions: [{ id: 'p1', name: 'Task Read', sub: 'Task
|
|
|
133
187
|
---
|
|
134
188
|
|
|
135
189
|
## 类型与再导出
|
|
136
|
-
- 从本包导出的类型:`PermissionApiResponse`、`PermissionApiConfig`、`AuthSdkConfig`、`CaslRule`。
|
|
137
|
-
- 便捷再导出:`MongoAbility`, `AbilityBuilder`, `AbilityClass`(来自 `@casl/ability`)。
|
|
138
190
|
|
|
139
|
-
|
|
191
|
+
- 从本包导出的类型:`PermissionApiResponse`、`PermissionApiConfig`、`AuthSdkConfig`、`CaslRule`。
|
|
192
|
+
- 最终用户代码中仅需要使用到的 API 有:
|
|
193
|
+
- `CanRole` 组件: 条件渲染,只有当角色 id 包含在 `roles` 中时才渲染子内容。
|
|
194
|
+
- `AbilityContext`: 从 React 上下文获取 CASL `Ability` 实例,用于权限判断。
|
|
195
|
+
- `ROLE_SUBJECT`: 特殊 subject `@role` 常量,用于角色判断。
|
|
140
196
|
|
|
141
197
|
## 集成建议与最佳实践
|
|
142
|
-
- **权限接口返回**:`{ role_ids: string[] }`。
|
|
143
|
-
- **错误处理**:实现 `onError` 上报或提示;`onSuccess` 可做埋点。
|
|
144
|
-
- **渲染时机**:根据 `useAuth()` 的 `isLoading`/`error` 渲染 Loading/Error 页,避免闪烁。
|
|
145
|
-
- **与路由结合**:页面级的访问控制需要结合路由库(如 `react-router-dom`)和 `useAuthAbility` hook 来自行实现。
|
|
146
198
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
## 进阶示例
|
|
150
|
-
|
|
151
|
-
### 菜单按权限过滤
|
|
152
|
-
```tsx
|
|
153
|
-
import { useAuthAbility } from '@lark-apaas/auth-sdk';
|
|
154
|
-
|
|
155
|
-
const menus = [
|
|
156
|
-
{ name: 'Dashboard', path: '/dashboard', p: { action: 'Editor', subject: '@role' } },
|
|
157
|
-
{ name: 'Users', path: '/users', p: { action: 'Admin', subject: '@role' } },
|
|
158
|
-
{ name: 'Settings', path: '/settings', p: { action: 'Admin', subject: '@role' } },
|
|
159
|
-
];
|
|
160
|
-
|
|
161
|
-
function Nav() {
|
|
162
|
-
const ability = useAuthAbility();
|
|
163
|
-
return (
|
|
164
|
-
<nav>
|
|
165
|
-
{menus.map(m => ability.can(m.p.action, m.p.subject) && (
|
|
166
|
-
<a key={m.path} href={m.path}>{m.name}</a>
|
|
167
|
-
))}
|
|
168
|
-
</nav>
|
|
169
|
-
);
|
|
170
|
-
}
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
---
|
|
174
|
-
|
|
175
|
-
## 常见问题(FAQ)
|
|
176
|
-
- **如何做角色判断?** 角色被映射为对特殊 subject `@role` 的 action。你可以使用 `ability.can('admin_role', '@role')` 来判断当前用户是否拥有 `admin_role` 角色。
|
|
177
|
-
- **如何实现路由守卫?** 由于 `CanRoute` 组件已移除,您需要结合您使用的路由库(如 `react-router-dom`)和 `useAuthAbility` hook 来手动实现路由守卫。通过在路由渲染前检查权限,然后决定是否渲染组件或重定向。
|
|
199
|
+
- **直接使用组件**:`CanRole` 组件是直接使用的主要入口,可以使用 `AbilityContext` 获取 `Ability` 实例,在特殊场景下手动判断权限。
|
|
200
|
+
- **与路由结合**:页面级的访问控制需要结合路由库(如 `react-router-dom`)和 `AbilityContext` 来自行实现。
|
|
178
201
|
|
|
179
202
|
---
|
|
180
203
|
|
|
181
204
|
## 许可
|
|
205
|
+
|
|
182
206
|
MIT
|
package/lib/AuthProvider.d.ts
CHANGED
|
@@ -46,6 +46,13 @@ export interface AuthProviderProps {
|
|
|
46
46
|
* ```
|
|
47
47
|
*/
|
|
48
48
|
export declare function AuthProvider({ children, config }: AuthProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
49
|
+
/**
|
|
50
|
+
* 获取 Ability 实例
|
|
51
|
+
*
|
|
52
|
+
* @param permissionApiConfig - 权限 API 配置
|
|
53
|
+
* @returns Ability 实例或错误
|
|
54
|
+
*/
|
|
55
|
+
export declare function getAbility(permissionApiConfig: AuthSdkConfig['permissionApi']): Promise<Error | MongoAbility<import("@casl/ability").AbilityTuple, import("@casl/ability").MongoQuery>>;
|
|
49
56
|
/**
|
|
50
57
|
* useAuth Hook - 获取权限数据和加载状态
|
|
51
58
|
*
|
|
@@ -104,6 +111,9 @@ export declare function useAuthAbility(): MongoAbility;
|
|
|
104
111
|
* ```
|
|
105
112
|
*/
|
|
106
113
|
export declare const Can: React.FunctionComponent<import("@casl/react").BoundCanProps<MongoAbility<import("@casl/ability").AbilityTuple, import("@casl/ability").MongoQuery>>>;
|
|
114
|
+
export declare const useCanRole: ({ roles }: {
|
|
115
|
+
roles: string[];
|
|
116
|
+
}) => boolean;
|
|
107
117
|
/**
|
|
108
118
|
* CanRole Component - 基于 Ability 实例的角色条件渲染组件
|
|
109
119
|
*
|
|
@@ -113,16 +123,16 @@ export declare const Can: React.FunctionComponent<import("@casl/react").BoundCan
|
|
|
113
123
|
*
|
|
114
124
|
* function MyComponent() {
|
|
115
125
|
* return (
|
|
116
|
-
* <CanRole
|
|
126
|
+
* <CanRole role="Admin">
|
|
117
127
|
* <TaskList />
|
|
118
128
|
* </CanRole>
|
|
119
129
|
* );
|
|
120
130
|
* }
|
|
121
131
|
* ```
|
|
122
132
|
*/
|
|
123
|
-
export declare
|
|
133
|
+
export declare function CanRole({ children, roles, }: {
|
|
124
134
|
children: React.ReactNode;
|
|
125
|
-
|
|
126
|
-
})
|
|
135
|
+
roles: string[];
|
|
136
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
127
137
|
export {};
|
|
128
138
|
//# sourceMappingURL=AuthProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthProvider.d.ts","sourceRoot":"","sources":["../src/AuthProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAK7C;;GAEG;AACH,eAAO,MAAM,cAAc,uGAE1B,CAAC;AAEF;;;GAGG;AACH,UAAU,qBAAqB;IAC7B,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,gBAAgB,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD;AAOD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,iBAAiB,2CA2DnE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,OAAO,IAAI,qBAAqB,CAQ/C;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,IAAI,YAAY,CAE7C;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,GAAG,sJAA+C,CAAC;AAEhE;;;;;;;;;;;;;;;GAeG;AACH,
|
|
1
|
+
{"version":3,"file":"AuthProvider.d.ts","sourceRoot":"","sources":["../src/AuthProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAK7C;;GAEG;AACH,eAAO,MAAM,cAAc,uGAE1B,CAAC;AAEF;;;GAGG;AACH,UAAU,qBAAqB;IAC7B,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,gBAAgB,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD;AAOD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,iBAAiB,2CA2DnE;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,mBAAmB,EAAE,aAAa,CAAC,eAAe,CAAC,2GAiBpD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,OAAO,IAAI,qBAAqB,CAQ/C;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,IAAI,YAAY,CAE7C;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,GAAG,sJAA+C,CAAC;AAEhE,eAAO,MAAM,UAAU,GAAa,WAAW;IAAE,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,KAAG,OAepE,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,OAAO,CAAC,EACtB,QAAQ,EACR,KAAK,GACN,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,kDAIA"}
|
package/lib/AuthProvider.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx } from "react/jsx-runtime";
|
|
1
|
+
import { Fragment, jsx } from "react/jsx-runtime";
|
|
2
2
|
import { createContext, useCallback, useContext, useEffect, useState } from "react";
|
|
3
3
|
import { ROLE_SUBJECT, createAbility, updateAbility } from "./ability-factory.js";
|
|
4
4
|
import { PermissionClient } from "./permission-client.js";
|
|
@@ -54,6 +54,20 @@ function AuthProvider({ children, config }) {
|
|
|
54
54
|
})
|
|
55
55
|
});
|
|
56
56
|
}
|
|
57
|
+
async function getAbility(permissionApiConfig) {
|
|
58
|
+
const ability = createAbility({});
|
|
59
|
+
const client = new PermissionClient(permissionApiConfig);
|
|
60
|
+
try {
|
|
61
|
+
const data = await client.fetchPermissions();
|
|
62
|
+
updateAbility(ability, {
|
|
63
|
+
roles: data.roles
|
|
64
|
+
});
|
|
65
|
+
} catch (err) {
|
|
66
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
67
|
+
return error;
|
|
68
|
+
}
|
|
69
|
+
return ability;
|
|
70
|
+
}
|
|
57
71
|
function useAuth() {
|
|
58
72
|
const context = useContext(AuthStateContext);
|
|
59
73
|
if (!context) throw new Error('useAuth must be used within an AuthProvider');
|
|
@@ -63,9 +77,19 @@ function useAuthAbility() {
|
|
|
63
77
|
return useContext(AbilityContext);
|
|
64
78
|
}
|
|
65
79
|
const Can = createContextualCan(AbilityContext.Consumer);
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
80
|
+
const useCanRole = function({ roles }) {
|
|
81
|
+
const context = useContext(AuthStateContext);
|
|
82
|
+
if (!context) return false;
|
|
83
|
+
const { ability } = context;
|
|
84
|
+
const allowed = !roles || 0 === roles.length || roles.length > 0 && roles.some((role)=>ability.can(role, ROLE_SUBJECT));
|
|
85
|
+
return !!allowed;
|
|
86
|
+
};
|
|
87
|
+
function CanRole({ children, roles }) {
|
|
88
|
+
const allowed = useCanRole({
|
|
89
|
+
roles
|
|
70
90
|
});
|
|
71
|
-
|
|
91
|
+
return allowed ? /*#__PURE__*/ jsx(Fragment, {
|
|
92
|
+
children: children
|
|
93
|
+
}) : null;
|
|
94
|
+
}
|
|
95
|
+
export { AbilityContext, AuthProvider, Can, CanRole, getAbility, useAuth, useAuthAbility, useCanRole };
|
package/lib/index.d.ts
CHANGED
|
@@ -4,10 +4,9 @@
|
|
|
4
4
|
* 基于 CASL 的前端鉴权 SDK
|
|
5
5
|
* 封装了权限数据获取和 Ability 初始化逻辑
|
|
6
6
|
*/
|
|
7
|
-
export type {
|
|
8
|
-
export {
|
|
7
|
+
export type { PermissionApiResponse, PermissionApiConfig, AuthSdkConfig, } from './types';
|
|
8
|
+
export { ROLE_SUBJECT } from './ability-factory';
|
|
9
9
|
export { PermissionClient } from './permission-client';
|
|
10
|
-
export { AuthProvider, useAuth,
|
|
10
|
+
export { AuthProvider, useAuth, CanRole, AbilityContext } from './AuthProvider';
|
|
11
11
|
export type { AuthProviderProps } from './AuthProvider';
|
|
12
|
-
export { MongoAbility, AbilityBuilder, type AbilityClass } from '@casl/ability';
|
|
13
12
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACV,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACV,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,GACd,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhF,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { ROLE_SUBJECT
|
|
1
|
+
import { ROLE_SUBJECT } from "./ability-factory.js";
|
|
2
2
|
import { PermissionClient } from "./permission-client.js";
|
|
3
|
-
import { AbilityContext, AuthProvider,
|
|
4
|
-
|
|
5
|
-
export { AbilityBuilder, AbilityContext, AuthProvider, Can, MongoAbility, PermissionClient, ROLE_SUBJECT, convertPermissionsToRules, createAbility, updateAbility, useAuth, useAuthAbility };
|
|
3
|
+
import { AbilityContext, AuthProvider, CanRole, useAuth } from "./AuthProvider.js";
|
|
4
|
+
export { AbilityContext, AuthProvider, CanRole, PermissionClient, ROLE_SUBJECT, useAuth };
|