@yss123/cage-admin 0.3.2 → 0.4.1
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 +10 -64
- package/dist/bootstrap.d.ts +1 -1
- package/dist/bootstrap.js +5 -7
- package/dist/bootstrap.js.map +1 -1
- package/dist/domain/constraints.d.ts +13 -1
- package/dist/domain/constraints.js +52 -2
- package/dist/domain/constraints.js.map +1 -1
- package/dist/domain/org.js +10 -8
- package/dist/domain/org.js.map +1 -1
- package/package.json +3 -3
- package/ui/dist/modules/roles/roles-page.js +14 -38
package/README.md
CHANGED
|
@@ -1,78 +1,24 @@
|
|
|
1
1
|
# @yss123/cage-admin
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
提供用户、部门、角色、授权、防提权约束及 /admin/ 系统管理。它管理组织基础,业务状态仍属于应用领域。
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 注册与初始化
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
pnpm add @yss123/cage-admin
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
首次使用建议通过脚手架创建完整项目,所需依赖由模板统一配置。需要 Node.js 24 或更新版本。
|
|
12
|
-
|
|
13
|
-
## 注册组织模型并初始化
|
|
14
|
-
|
|
15
|
-
在应用 `packages/domain/src/index.ts` 保留这一行,同时导出自己的业务模块:
|
|
7
|
+
安装 pnpm add @yss123/cage-admin。在 domain 根入口保留:
|
|
16
8
|
|
|
17
9
|
```ts
|
|
18
|
-
/**
|
|
10
|
+
/** 组织模型与业务共同注册,导入不创建账号。 */
|
|
19
11
|
export * from '@yss123/cage-admin/domain';
|
|
20
12
|
```
|
|
21
13
|
|
|
22
|
-
标准
|
|
23
|
-
|
|
24
|
-
在脚手架项目中填写已有 PostgreSQL 数据库的本地配置,运行 `pnpm exec cage init`、构建与 `pnpm gen`,审查后执行 `pnpm migrate`。然后显式初始化组织:
|
|
25
|
-
|
|
26
|
-
```powershell
|
|
27
|
-
pnpm exec cage bootstrap --credentials-file .cage/admin-credentials.json
|
|
28
|
-
pnpm dev
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
初始凭据只交付到新的受限文件,交付后移除;不要提交到 Git 或贴入日志。服务启动不会自动重置管理员密码。管理员再配置用户、部门、角色、业务命令能力与数据范围;新增业务能力不会自动授予生产角色。
|
|
32
|
-
|
|
33
|
-
| 公开入口 | 用途 |
|
|
34
|
-
| --- | --- |
|
|
35
|
-
| `@yss123/cage-admin/domain` | `Dept/User/Role` 聚合及创建、修改、角色分配和授权命令,供 domain 组合 |
|
|
36
|
-
| `bootstrapOrg` | 受控初始化工具调用的组织准备,普通服务启动不调用 |
|
|
37
|
-
| `adminRoutes`、`adminCatalog` | HTTP 装配层的管理接口与展示目录 |
|
|
38
|
-
| `noEscalation`、`noEscalationViaRoles`、`noWiderScope`、`knownCapability` | 组织授权命令使用的防提权与能力目录约束 |
|
|
39
|
-
| `hashPassword` | 服务端密码处理辅助函数,不在浏览器调用或存储明文 |
|
|
40
|
-
|
|
41
|
-
角色选人、菜单显示和中文标签不授予权限。最终写入通过命令执行,授权变更也受当前操作者的能力与范围约束。`grantAll/grantAllToSuperadmin` 是显式管理工具,不应在日常启动或升级中自动执行。
|
|
42
|
-
|
|
43
|
-
## 中文管理界面
|
|
44
|
-
|
|
45
|
-
启动 API 后访问 `/admin/`。页面包含审批待办、用户与部门、角色与授权、操作审计、异步任务和第三方同步。角色页按业务对象分组展示权限,支持中文或代码搜索;操作权限即时保存,数据范围与审批额度需要点击各自的保存按钮。中文显示不改变真实权限标识,也不会自动给角色增加权限。
|
|
46
|
-
|
|
47
|
-
业务聚合和命令应填写中文 `description`。项目根目录 `cage.config.json` 的 `graph.labels` 同时用于图谱和系统管理,无需再维护一份翻译:
|
|
48
|
-
|
|
49
|
-
```json
|
|
50
|
-
{
|
|
51
|
-
"graph": {
|
|
52
|
-
"labels": {
|
|
53
|
-
"aggregate:PurchaseOrder": "采购单",
|
|
54
|
-
"command:PurchaseOrder.submit": "提交审批",
|
|
55
|
-
"capability:PurchaseOrder.export": "导出采购单",
|
|
56
|
-
"approval:poApproval": "采购审批流程",
|
|
57
|
-
"event:OrderSubmitted": "采购单已提交",
|
|
58
|
-
"job:expireStaleOrders": "清理过期草稿"
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
以上是合并进已有配置的片段,不要覆盖项目中的 domain、contracts 等设置。修改显示名后重启 API。API 进程应在项目根目录启动;Docker 模板也会复制这份配置到运行时镜像。
|
|
65
|
-
|
|
66
|
-
名称优先级:权限专用 `capability:` → `command:` → 命令 `description` → 常用动作中文;业务对象使用 `aggregate:` → 聚合 `description`。read/export 会自动组合对象中文名,敏感字段明文权限和调用方也会显示中文。框架无法凭代码猜测自定义业务术语,缺少中文时需要在声明或配置中补充。
|
|
14
|
+
标准 cage-http 装配管理页,API/worker 使用相同 domain。先 init、构建/生成、审查并 migrate,再显式运行 cage bootstrap --credentials-file .cage/admin-credentials.json。
|
|
67
15
|
|
|
68
|
-
|
|
16
|
+
凭据只交付新受限文件,交付后移除。首次超级管理员获得受控 * 标记,展开当前及以后新增能力和本租户全部范围;普通角色显式授权。已有组织不重置密码或自动升级角色。
|
|
69
17
|
|
|
70
|
-
##
|
|
18
|
+
## 授权与能力
|
|
71
19
|
|
|
72
|
-
|
|
20
|
+
角色能力、聚合范围、调用身份和业务约束分别生效。被选为审批人不会自动获得权限,前端 can 仅控制显示。普通管理员不能创建超级管理员标记或间接接管该角色。
|
|
73
21
|
|
|
74
|
-
|
|
75
|
-
- [框架源码与范例](https://github.com/shunshunyue/cage)
|
|
76
|
-
- [问题反馈](https://github.com/shunshunyue/cage/issues)
|
|
22
|
+
bootstrapOrg/grantAll 等服务端维护 API 需要受信任调用者,不是普通业务自助授权接口。浏览器使用客户端,不能导入组织运行时。尚无完整的移动部门和菜单配置能力。
|
|
77
23
|
|
|
78
|
-
|
|
24
|
+
[权限与范围](https://github.com/shunshunyue/cage/blob/main/docs/development/reference/authorization.md) · [启动与凭据](https://github.com/shunshunyue/cage/blob/main/docs/development/getting-started/start.md)
|
package/dist/bootstrap.d.ts
CHANGED
|
@@ -31,7 +31,7 @@ export declare function bootstrapOrg(k: Kernel, opts?: {
|
|
|
31
31
|
/** 显式授权维护工具;普通启动和生产角色不应自动调用。 */
|
|
32
32
|
/**
|
|
33
33
|
* 显式补齐指定角色尚未拥有的目录能力,返回本次新增数量。
|
|
34
|
-
*
|
|
34
|
+
* 已有授权参数保持不变;新增能力不附带业务参数。
|
|
35
35
|
* 每次调用通过系统身份执行领域命令,属于高权限维护操作;多次命令并非整批单一事务。
|
|
36
36
|
* 调用方必须确认目标角色与租户,不应作为生产角色自动获取新增业务能力的入口。
|
|
37
37
|
*/
|
package/dist/bootstrap.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* 本模块使用受信任的系统身份,调用者应明确决定何时执行,不能把它暴露为普通业务自助授权接口。
|
|
5
5
|
*/
|
|
6
6
|
// 显式初始化组织:建根部门、超级管理员角色和初始管理员账号。
|
|
7
|
-
//
|
|
7
|
+
// 初始化写入受控通配标记;有效角色会随当前能力目录取得完整授权。
|
|
8
8
|
import { randomBytes } from 'node:crypto';
|
|
9
9
|
import { DEFAULT_TENANT, systemCtx } from '@yss123/cage-kernel';
|
|
10
10
|
import { sql } from 'kysely';
|
|
@@ -13,7 +13,7 @@ import { sql } from 'kysely';
|
|
|
13
13
|
* 此身份仅服务于受控初始化,不是前端可自行构造的管理员豁免。
|
|
14
14
|
*/
|
|
15
15
|
function bootstrapCtx(k, tenantId) {
|
|
16
|
-
return systemCtx({ kind: 'system', name: 'bootstrap', tenantId, capabilities: k.catalogCaps() });
|
|
16
|
+
return systemCtx({ kind: 'system', name: 'bootstrap', tenantId, capabilities: [...k.catalogCaps(), '*'] });
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
19
|
* 首次创建根部门、超级管理员角色及账号,并在同一事务中设置能力、范围和密码。
|
|
@@ -34,9 +34,7 @@ export async function bootstrapOrg(k, opts = {}) {
|
|
|
34
34
|
const execute = (command, input) => k.executeIn(tx, command, input, ctx, 0);
|
|
35
35
|
const root = await execute('Dept.create', { name: opts.rootDeptName ?? '总部', code: 'root' });
|
|
36
36
|
const role = await execute('Role.create', { code: 'superadmin', name: '超级管理员' });
|
|
37
|
-
|
|
38
|
-
await execute('Role.grantCapability', { id: role.id, capability: cap, params: cap.endsWith('.approve') ? { ceiling: 1_000_000_000 } : undefined });
|
|
39
|
-
}
|
|
37
|
+
await execute('Role.grantCapability', { id: role.id, capability: '*' });
|
|
40
38
|
await execute('Role.setScope', { id: role.id, aggregate: '*', combinator: 'all' });
|
|
41
39
|
const username = opts.adminUsername ?? 'admin';
|
|
42
40
|
const password = opts.adminPassword ?? randomBytes(9).toString('base64url');
|
|
@@ -51,7 +49,7 @@ export async function bootstrapOrg(k, opts = {}) {
|
|
|
51
49
|
/** 显式授权维护工具;普通启动和生产角色不应自动调用。 */
|
|
52
50
|
/**
|
|
53
51
|
* 显式补齐指定角色尚未拥有的目录能力,返回本次新增数量。
|
|
54
|
-
*
|
|
52
|
+
* 已有授权参数保持不变;新增能力不附带业务参数。
|
|
55
53
|
* 每次调用通过系统身份执行领域命令,属于高权限维护操作;多次命令并非整批单一事务。
|
|
56
54
|
* 调用方必须确认目标角色与租户,不应作为生产角色自动获取新增业务能力的入口。
|
|
57
55
|
*/
|
|
@@ -63,7 +61,7 @@ export async function grantAll(k, roleId, tenantId = DEFAULT_TENANT) {
|
|
|
63
61
|
for (const cap of k.catalogCaps()) {
|
|
64
62
|
if (have.has(cap))
|
|
65
63
|
continue;
|
|
66
|
-
await k.execute('Role.grantCapability', { id: roleId, capability: cap
|
|
64
|
+
await k.execute('Role.grantCapability', { id: roleId, capability: cap }, ctx);
|
|
67
65
|
n++;
|
|
68
66
|
}
|
|
69
67
|
return n;
|
package/dist/bootstrap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,gCAAgC;AAChC,
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,19 @@ import { type Constraint } from '@yss123/cage-kernel';
|
|
|
10
10
|
* 未知能力返回 CAGE-GRANT-003;该检查不负责判断操作者是否拥有这个能力。
|
|
11
11
|
*/
|
|
12
12
|
export declare const knownCapability: () => Constraint;
|
|
13
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* 保护带全部能力标记的角色。普通角色管理员不能维护它;超级管理员不能移除通配标记或停用该角色,
|
|
15
|
+
* 避免初始角色失效后无法通过普通授权恢复。受信任系统身份仍可执行维护;角色名称不决定特权。
|
|
16
|
+
*/
|
|
17
|
+
export declare const protectSuperadminRole: () => Constraint;
|
|
18
|
+
/**
|
|
19
|
+
* 保护已分配全部能力角色的用户,防止普通用户管理员通过重置密码或更换角色接管管理员。
|
|
20
|
+
* 在当前事务、当前租户及操作者可见范围中读取用户已有的角色;停用角色仍受保护。
|
|
21
|
+
* 超级管理员不能停用自己,也不能移除自己最后一个有效的全部能力角色,避免误操作后无法继续授权。
|
|
22
|
+
* 角色不可见或不存在时无法确认目标用户是否受保护,拒绝操作;系统身份可执行维护。
|
|
23
|
+
*/
|
|
24
|
+
export declare const protectSuperadminUser: () => Constraint;
|
|
25
|
+
/** 防提权:不能授出自己没有的能力点;数值参数不能超过自己的。 */
|
|
14
26
|
/**
|
|
15
27
|
* 构造直接授权的防提权约束:操作者必须已有目标能力。
|
|
16
28
|
* 输入与操作者参数在同一键上都为 number 时,新值不能更大;其他参数类型不在这里比较。
|
|
@@ -20,9 +20,59 @@ function ownWidth(ctx, aggregate) {
|
|
|
20
20
|
*/
|
|
21
21
|
export const knownCapability = () => ({
|
|
22
22
|
name: 'knownCapability',
|
|
23
|
-
check: (_role, _ctx, input, meta) =>
|
|
23
|
+
check: (_role, _ctx, input, meta) => (input.capability === '*' ? _ctx.actor?.kind === 'system' && _ctx.actor.id === 'system:bootstrap' : meta.catalog().includes(input.capability))
|
|
24
|
+
? ok() : violation(`[CAGE-GRANT-003] 能力点 ${input.capability} 不在能力目录里`),
|
|
24
25
|
});
|
|
25
|
-
/**
|
|
26
|
+
/**
|
|
27
|
+
* 保护带全部能力标记的角色。普通角色管理员不能维护它;超级管理员不能移除通配标记或停用该角色,
|
|
28
|
+
* 避免初始角色失效后无法通过普通授权恢复。受信任系统身份仍可执行维护;角色名称不决定特权。
|
|
29
|
+
*/
|
|
30
|
+
export const protectSuperadminRole = () => ({
|
|
31
|
+
name: 'protectSuperadminRole',
|
|
32
|
+
check: (role, ctx, input, meta) => {
|
|
33
|
+
if (!role.capabilities?.some((entry) => entry.capability === '*') || ctx.actor?.kind === 'system')
|
|
34
|
+
return ok();
|
|
35
|
+
if (!ctx.capabilities.has('*'))
|
|
36
|
+
return violation('[CAGE-GRANT-001] 只有超级管理员可以维护超级管理员角色');
|
|
37
|
+
if (meta.capability === 'Role.archive' || (meta.capability === 'Role.revokeCapability' && input.capability === '*'))
|
|
38
|
+
return violation('[CAGE-GRANT-001] 不能停用超级管理员角色或移除全部能力标记');
|
|
39
|
+
return ok();
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
/**
|
|
43
|
+
* 保护已分配全部能力角色的用户,防止普通用户管理员通过重置密码或更换角色接管管理员。
|
|
44
|
+
* 在当前事务、当前租户及操作者可见范围中读取用户已有的角色;停用角色仍受保护。
|
|
45
|
+
* 超级管理员不能停用自己,也不能移除自己最后一个有效的全部能力角色,避免误操作后无法继续授权。
|
|
46
|
+
* 角色不可见或不存在时无法确认目标用户是否受保护,拒绝操作;系统身份可执行维护。
|
|
47
|
+
*/
|
|
48
|
+
export const protectSuperadminUser = () => ({
|
|
49
|
+
name: 'protectSuperadminUser',
|
|
50
|
+
check: async (user, ctx, input, meta) => {
|
|
51
|
+
if (ctx.actor?.kind === 'user' && ctx.userId === user.id && ctx.capabilities.has('*')) {
|
|
52
|
+
if (meta.capability === 'User.disable')
|
|
53
|
+
return violation('[CAGE-GRANT-001] 超级管理员不能停用自己的账号');
|
|
54
|
+
if (meta.capability === 'User.assignRoles') {
|
|
55
|
+
for (const id of input.roleIds) {
|
|
56
|
+
const role = await meta.load('Role', id);
|
|
57
|
+
if (role?.status === 'active' && role.capabilities?.some((entry) => entry.capability === '*'))
|
|
58
|
+
return ok();
|
|
59
|
+
}
|
|
60
|
+
return violation('[CAGE-GRANT-001] 超级管理员不能移除自己的全部能力角色');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (ctx.capabilities.has('*') || ctx.actor?.kind === 'system')
|
|
64
|
+
return ok();
|
|
65
|
+
for (const id of user.roleIds ?? []) {
|
|
66
|
+
const role = await meta.load('Role', id);
|
|
67
|
+
if (!role)
|
|
68
|
+
return violation('[CAGE-GRANT-001] 无法确认用户角色,不能维护该账号');
|
|
69
|
+
if (role?.capabilities?.some((entry) => entry.capability === '*'))
|
|
70
|
+
return violation('[CAGE-GRANT-001] 只有超级管理员可以维护超级管理员账号');
|
|
71
|
+
}
|
|
72
|
+
return ok();
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
/** 防提权:不能授出自己没有的能力点;数值参数不能超过自己的。 */
|
|
26
76
|
/**
|
|
27
77
|
* 构造直接授权的防提权约束:操作者必须已有目标能力。
|
|
28
78
|
* 输入与操作者参数在同一键上都为 number 时,新值不能更大;其他参数类型不在这里比较。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constraints.js","sourceRoot":"","sources":["../../src/domain/constraints.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,iDAAiD;AACjD,OAAO,EAAE,gBAAgB,EAA8C,EAAE,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAElH;;;GAGG;AACH,SAAS,QAAQ,CAAC,GAAQ,EAAE,SAAiB;IAC3C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,MAAoB,EAAE,CAAC,CAAC;IAClG,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,sBAAsB;AACtB;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,GAAe,EAAE,CAAC,CAAC;IAChD,IAAI,EAAE,iBAAiB;IACvB,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAClC,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,wBAAwB,KAAK,CAAC,UAAU,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"constraints.js","sourceRoot":"","sources":["../../src/domain/constraints.ts"],"names":[],"mappings":"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"}
|
package/dist/domain/org.js
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
import { scrypt, randomBytes } from 'node:crypto';
|
|
10
10
|
import { aggregate, command, enumOf, fail, id, json, list, ref, scope, states, text, COMBINATORS, } from '@yss123/cage-kernel';
|
|
11
11
|
import { z } from 'zod';
|
|
12
|
-
import { noEscalation, noEscalationViaRoles, noWiderScope, knownCapability } from './constraints.js';
|
|
12
|
+
import { noEscalation, noEscalationViaRoles, noWiderScope, knownCapability, protectSuperadminRole, protectSuperadminUser } from './constraints.js';
|
|
13
13
|
// ---------------- 部门 ----------------
|
|
14
14
|
/**
|
|
15
15
|
* 部门组织单元,active 可维护,archived 为终态。
|
|
@@ -66,7 +66,7 @@ export const Role = aggregate('Role', {
|
|
|
66
66
|
fields: {
|
|
67
67
|
code: text(64).unique(),
|
|
68
68
|
name: text(100),
|
|
69
|
-
/**
|
|
69
|
+
/** 能力点及可选参数;初始化写入的 * 标记代表当前目录的全部能力。 */
|
|
70
70
|
capabilities: list({ capability: text(200), params: json().optional() }),
|
|
71
71
|
/** 各聚合上的数据范围;aggregate 为 * 表示所有聚合 */
|
|
72
72
|
scopes: list({ aggregate: text(100), combinator: enumOf(...COMBINATORS), deptIds: list(id()).optional() }),
|
|
@@ -194,7 +194,7 @@ export const assignRoles = command(User, {
|
|
|
194
194
|
from: 'active',
|
|
195
195
|
to: 'active',
|
|
196
196
|
input: z.object({ id: z.string().uuid(), roleIds: z.array(z.string().uuid()).max(50) }),
|
|
197
|
-
constraints: [noEscalationViaRoles()],
|
|
197
|
+
constraints: [protectSuperadminUser(), noEscalationViaRoles()],
|
|
198
198
|
reads: { roles: Role },
|
|
199
199
|
handler: async (_o, input, deps) => {
|
|
200
200
|
for (const rid of input.roleIds) {
|
|
@@ -208,11 +208,11 @@ export const assignRoles = command(User, {
|
|
|
208
208
|
/**
|
|
209
209
|
* 将 active 用户转为 disabled,仅声明状态变化;认证和上下文刷新据状态拒绝后续使用。
|
|
210
210
|
*/
|
|
211
|
-
export const disableUser = command(User, { name: 'disable', description: '停用用户', from: 'active', to: 'disabled', handler: () => ({}) });
|
|
211
|
+
export const disableUser = command(User, { name: 'disable', description: '停用用户', from: 'active', to: 'disabled', constraints: [protectSuperadminUser()], handler: () => ({}) });
|
|
212
212
|
/**
|
|
213
213
|
* 将 disabled 用户恢复为 active,不重置原有角色、资料或密码。
|
|
214
214
|
*/
|
|
215
|
-
export const enableUser = command(User, { name: 'enable', description: '启用用户', from: 'disabled', to: 'active', handler: () => ({}) });
|
|
215
|
+
export const enableUser = command(User, { name: 'enable', description: '启用用户', from: 'disabled', to: 'active', constraints: [protectSuperadminUser()], handler: () => ({}) });
|
|
216
216
|
/** 密码哈希:scrypt$盐$哈希(纯计算,不做 IO) */
|
|
217
217
|
/**
|
|
218
218
|
* 以随机 16 字节盐调用异步 scrypt,派生 32 字节结果并编码为认证使用的三段字符串。
|
|
@@ -236,6 +236,7 @@ export const setPassword = command(User, {
|
|
|
236
236
|
from: 'active',
|
|
237
237
|
to: 'active',
|
|
238
238
|
input: z.object({ id: z.string().uuid(), password: z.string().min(8).max(200) }),
|
|
239
|
+
constraints: [protectSuperadminUser()],
|
|
239
240
|
handler: async (_o, input) => ({ passwordHash: await hashPassword(input.password) }),
|
|
240
241
|
});
|
|
241
242
|
// ---------------- 角色命令 ----------------
|
|
@@ -278,7 +279,7 @@ export const grantCapability = command(Role, {
|
|
|
278
279
|
from: 'active',
|
|
279
280
|
to: 'active',
|
|
280
281
|
input: z.object({ id: z.string().uuid(), capability: z.string().min(1).max(200), params: z.record(z.string(), z.unknown()).optional() }),
|
|
281
|
-
constraints: [knownCapability(), noEscalation()],
|
|
282
|
+
constraints: [protectSuperadminRole(), knownCapability(), noEscalation()],
|
|
282
283
|
handler: (role, input) => ({
|
|
283
284
|
capabilities: [
|
|
284
285
|
...role.capabilities.filter((c) => c.capability !== input.capability),
|
|
@@ -296,6 +297,7 @@ export const revokeCapability = command(Role, {
|
|
|
296
297
|
from: 'active',
|
|
297
298
|
to: 'active',
|
|
298
299
|
input: z.object({ id: z.string().uuid(), capability: z.string().min(1).max(200) }),
|
|
300
|
+
constraints: [protectSuperadminRole()],
|
|
299
301
|
handler: (role, input) => ({ capabilities: role.capabilities.filter((c) => c.capability !== input.capability) }),
|
|
300
302
|
});
|
|
301
303
|
/**
|
|
@@ -314,7 +316,7 @@ export const setScope = command(Role, {
|
|
|
314
316
|
combinator: z.enum(['all', 'self', 'dept', 'deptSubtree', 'deptSet']).nullable(),
|
|
315
317
|
deptIds: z.array(z.string().uuid()).optional(),
|
|
316
318
|
}),
|
|
317
|
-
constraints: [noWiderScope()],
|
|
319
|
+
constraints: [protectSuperadminRole(), noWiderScope()],
|
|
318
320
|
handler: (role, input) => {
|
|
319
321
|
const rest = role.scopes.filter((s) => s.aggregate !== input.aggregate);
|
|
320
322
|
if (input.combinator === null)
|
|
@@ -328,5 +330,5 @@ export const setScope = command(Role, {
|
|
|
328
330
|
/**
|
|
329
331
|
* 将 active 角色停用为 archived;保留历史授权数据,角色的后续有效性由上下文加载按状态判断。
|
|
330
332
|
*/
|
|
331
|
-
export const archiveRole = command(Role, { name: 'archive', description: '停用角色', from: 'active', to: 'archived', handler: () => ({}) });
|
|
333
|
+
export const archiveRole = command(Role, { name: 'archive', description: '停用角色', from: 'active', to: 'archived', constraints: [protectSuperadminRole()], handler: () => ({}) });
|
|
332
334
|
//# sourceMappingURL=org.js.map
|
package/dist/domain/org.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"org.js","sourceRoot":"","sources":["../../src/domain/org.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"org.js","sourceRoot":"","sources":["../../src/domain/org.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yss123/cage-admin",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "组织模型声明与 /admin 系统管理",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"fastify": "^5.6.0",
|
|
26
26
|
"zod": "^4.1.5",
|
|
27
27
|
"kysely": "^0.28.5",
|
|
28
|
-
"@yss123/cage-
|
|
29
|
-
"@yss123/cage-
|
|
28
|
+
"@yss123/cage-kernel": "0.4.1",
|
|
29
|
+
"@yss123/cage-ai-protocol": "0.4.1"
|
|
30
30
|
},
|
|
31
31
|
"license": "MIT",
|
|
32
32
|
"repository": {
|
|
@@ -51,7 +51,7 @@ export async function renderRoles(main) {
|
|
|
51
51
|
},
|
|
52
52
|
}, h('span', { class: 'role-avatar' }, icon('shield')), h('span', { class: 'role-item-copy' }, h('strong', {}, role.name), h('small', {}, role.code)), role.status !== 'active'
|
|
53
53
|
? badge('停用')
|
|
54
|
-
: h('span', { class: 'role-item-count' }, role.capabilities.length))));
|
|
54
|
+
: h('span', { class: 'role-item-count' }, role.capabilities.some((item) => item.capability === '*') ? state.catalog.capabilities.length : role.capabilities.length))));
|
|
55
55
|
if (!visible.length)
|
|
56
56
|
list.append(h('p', { class: 'list-empty' }, '没有匹配的角色'));
|
|
57
57
|
}
|
|
@@ -100,7 +100,8 @@ export async function renderRoles(main) {
|
|
|
100
100
|
roles = roles.map((item) => (item.id === updated.id ? updated : item));
|
|
101
101
|
renderList();
|
|
102
102
|
};
|
|
103
|
-
const
|
|
103
|
+
const allCapabilities = role.capabilities.some((item) => item.capability === '*');
|
|
104
|
+
const countText = h('strong', {}, String(allCapabilities ? state.catalog.capabilities.length : role.capabilities.length));
|
|
104
105
|
const summary = h('div', { class: 'role-summary' }, h('div', { class: 'role-title' }, h('span', { class: 'role-emblem' }, icon('shield')), h('div', {}, h('div', { class: 'title-line' }, h('h2', {}, role.name), badge(role.status === 'active' ? '使用中' : '已停用', role.status === 'active' ? 'green' : 'neutral')), h('p', {}, h('code', {}, role.code), h('span', {}, '· 按角色统一管理访问权限')))), h('div', { class: 'permission-total' }, countText, h('span', {}, '项已授权')));
|
|
105
106
|
const body = h('div', { class: 'role-tab-body' });
|
|
106
107
|
const buttons = ['permissions', 'scopes'].map((key) => h('button', {
|
|
@@ -143,6 +144,10 @@ export async function renderRoles(main) {
|
|
|
143
144
|
*/
|
|
144
145
|
function renderGroups() {
|
|
145
146
|
const granted = new Map(role.capabilities.map((item) => [item.capability, item.params]));
|
|
147
|
+
// 通配角色始终拥有当前目录中的能力,不能通过逐项开关修改。
|
|
148
|
+
if (allCapabilities)
|
|
149
|
+
for (const item of state.catalog.capabilities)
|
|
150
|
+
granted.set(item.capability, {});
|
|
146
151
|
const search = query.trim().toLowerCase();
|
|
147
152
|
const groups = new Map();
|
|
148
153
|
const visible = state.catalog.capabilities.filter((item) => {
|
|
@@ -160,7 +165,7 @@ export async function renderRoles(main) {
|
|
|
160
165
|
}
|
|
161
166
|
grid.replaceChildren();
|
|
162
167
|
filteredCount.textContent = `显示 ${visible.length} 项权限`;
|
|
163
|
-
countText.textContent = String(role.capabilities.length);
|
|
168
|
+
countText.textContent = String(allCapabilities ? state.catalog.capabilities.length : role.capabilities.length);
|
|
164
169
|
// 客户业务排在前面,框架自带的组织与运维权限放在后面,先回答业务人员最关心的问题。
|
|
165
170
|
const builtIn = new Set(['Dept', 'User', 'Role', 'system']);
|
|
166
171
|
const ordered = [...groups].sort(([a], [b]) => Number(builtIn.has(a)) - Number(builtIn.has(b)));
|
|
@@ -176,12 +181,12 @@ export async function renderRoles(main) {
|
|
|
176
181
|
grid.append(emptyState('没有找到匹配的权限', '换一个关键词,或调整上方授权筛选。', 'search'));
|
|
177
182
|
}
|
|
178
183
|
/**
|
|
179
|
-
*
|
|
180
|
-
*
|
|
184
|
+
* 构建能力开关,按钮依据角色状态和当前操作者能力启用。
|
|
185
|
+
* 切换失败恢复旧勾选值,成功更新角色快照;通配角色的能力由目录自动展开。
|
|
181
186
|
*/
|
|
182
187
|
function permissionRow(capability, granted) {
|
|
183
188
|
const checked = granted.has(capability.capability);
|
|
184
|
-
const authorized = role.status === 'active' &&
|
|
189
|
+
const authorized = !allCapabilities && role.status === 'active' &&
|
|
185
190
|
can(checked ? 'Role.revokeCapability' : 'Role.grantCapability') &&
|
|
186
191
|
(checked || can(capability.capability));
|
|
187
192
|
const mode = invocation(capability);
|
|
@@ -215,35 +220,6 @@ export async function renderRoles(main) {
|
|
|
215
220
|
: title,
|
|
216
221
|
}, toggle, h('span', { class: 'checkbox-visual' }, icon('check')), h('span', { class: 'permission-copy' }, h('span', { class: 'permission-name' }, title), h('code', {}, capability.capability))), mode &&
|
|
217
222
|
h('span', { class: 'invocation-badge', title: '配置此权限后,仍需通过对应流程或外部接口调用' }, mode));
|
|
218
|
-
if (checked &&
|
|
219
|
-
(capability.capability.endsWith('.approve') ||
|
|
220
|
-
granted.get(capability.capability)?.ceiling !== undefined)) {
|
|
221
|
-
const ceiling = h('input', {
|
|
222
|
-
type: 'number',
|
|
223
|
-
min: 0,
|
|
224
|
-
step: 'any',
|
|
225
|
-
placeholder: '请设置额度',
|
|
226
|
-
value: String(granted.get(capability.capability)?.ceiling ?? ''),
|
|
227
|
-
required: true,
|
|
228
|
-
disabled: !can('Role.grantCapability') || !can(capability.capability) || role.status !== 'active',
|
|
229
|
-
'aria-label': `${title}额度上限`,
|
|
230
|
-
});
|
|
231
|
-
const save = h('button', { type: 'submit', class: 'small', disabled: ceiling.disabled }, '保存额度');
|
|
232
|
-
row.append(h('form', {
|
|
233
|
-
class: 'limit-form',
|
|
234
|
-
onsubmit: async (event) => {
|
|
235
|
-
event.preventDefault();
|
|
236
|
-
const updated = await run(() => api('POST', `/api/role/${role.id}/grant-capability`, {
|
|
237
|
-
capability: capability.capability,
|
|
238
|
-
params: { ...granted.get(capability.capability), ceiling: Number(ceiling.value) },
|
|
239
|
-
}), '额度已保存', save);
|
|
240
|
-
if (updated) {
|
|
241
|
-
updateRole(updated);
|
|
242
|
-
renderGroups();
|
|
243
|
-
}
|
|
244
|
-
},
|
|
245
|
-
}, h('span', {}, '额度上限'), ceiling, save));
|
|
246
|
-
}
|
|
247
223
|
return row;
|
|
248
224
|
}
|
|
249
225
|
renderGroups();
|
|
@@ -264,9 +240,9 @@ export async function renderRoles(main) {
|
|
|
264
240
|
* 提交 null 删除显式配置,成功后重画详情以反映真实服务端结果。
|
|
265
241
|
*/
|
|
266
242
|
function scopeCard(aggregate) {
|
|
267
|
-
const current = role.scopes.find((scope) => scope.aggregate === aggregate.name);
|
|
268
|
-
const inherited = role.scopes.find((scope) => scope.aggregate === '*');
|
|
269
|
-
const editable = role.status === 'active' && can('Role.setScope');
|
|
243
|
+
const current = allCapabilities ? { aggregate: aggregate.name, combinator: 'all', deptIds: undefined } : role.scopes.find((scope) => scope.aggregate === aggregate.name);
|
|
244
|
+
const inherited = allCapabilities ? { aggregate: '*', combinator: 'all' } : role.scopes.find((scope) => scope.aggregate === '*');
|
|
245
|
+
const editable = !allCapabilities && role.status === 'active' && can('Role.setScope');
|
|
270
246
|
const usable = state.catalog.combinators.filter((kind) => aggregate.name === '*' ||
|
|
271
247
|
kind === 'all' ||
|
|
272
248
|
(kind === 'self' ? aggregate.scope.ownerField : aggregate.scope.deptField));
|