@yongdall/organization-rbac 0.6.6 → 0.7.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/index.d.mts +43 -64
- package/index.mjs +2 -3
- package/{organization-rbac-CVRP1FKi.mjs → organization-rbac-Bbuq32zd.mjs} +39 -43
- package/organization-rbac-Bbuq32zd.mjs.map +1 -0
- package/package.json +9 -9
- package/yongdall/migration.mjs +3 -5
- package/yongdall/migration.mjs.map +1 -1
- package/yongdall/model.mjs +3 -5
- package/yongdall/model.mjs.map +1 -1
- package/yongdall/user.mjs +2 -3
- package/organization-rbac-CVRP1FKi.mjs.map +0 -1
package/index.d.mts
CHANGED
|
@@ -1,30 +1,20 @@
|
|
|
1
|
-
import * as imodel20 from "imodel";
|
|
2
|
-
import * as _yongdall_model3 from "@yongdall/model";
|
|
3
|
-
|
|
4
1
|
//#region plugins/organization-rbac/models/CompositeRole.d.mts
|
|
5
|
-
declare const CompositeRole:
|
|
6
|
-
id:
|
|
7
|
-
label:
|
|
8
|
-
organizationId:
|
|
9
|
-
description:
|
|
10
|
-
createdAt:
|
|
11
|
-
updatedAt:
|
|
2
|
+
export declare const CompositeRole: import("@yongdall/model").ModelTable<{
|
|
3
|
+
id: import("imodel").FieldDefine<"uuid", false, false>;
|
|
4
|
+
label: import("imodel").FieldDefine<"string", false, false>;
|
|
5
|
+
organizationId: import("imodel").FieldDefine<"uuid", false, true>;
|
|
6
|
+
description: import("imodel").FieldDefine<"text", false, true>;
|
|
7
|
+
createdAt: import("imodel").FieldDefine<"timestamp", false, false>;
|
|
8
|
+
updatedAt: import("imodel").FieldDefine<"timestamp", false, false>;
|
|
12
9
|
}, "compositeRole">;
|
|
13
10
|
//#endregion
|
|
14
11
|
//#region plugins/organization-rbac/models/OrganizationCompositeRole.d.mts
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
* @property {number} no - 编号
|
|
22
|
-
*/
|
|
23
|
-
declare const OrganizationCompositeRole: _yongdall_model3.ModelTable<{
|
|
24
|
-
compositeRoleId: imodel20.FieldDefine<"uuid", false, false>;
|
|
25
|
-
organizationId: imodel20.FieldDefine<"uuid", false, false>;
|
|
26
|
-
roleId: imodel20.FieldDefine<"uuid", false, false>;
|
|
27
|
-
createdAt: imodel20.FieldDefine<"date", false, false>;
|
|
12
|
+
export declare const OrganizationCompositeRole: import("@yongdall/model").ModelTable<{
|
|
13
|
+
compositeRoleId: import("imodel").FieldDefine<"uuid", false, false>;
|
|
14
|
+
organizationId: import("imodel").FieldDefine<"uuid", false, false>;
|
|
15
|
+
roleId: import("imodel").FieldDefine<"uuid", false, false>;
|
|
16
|
+
mainOrganizationId: import("imodel").FieldDefine<"uuid", false, false>;
|
|
17
|
+
createdAt: import("imodel").FieldDefine<"timestamp", false, false>;
|
|
28
18
|
}, "organizationCompositeRole">;
|
|
29
19
|
//#endregion
|
|
30
20
|
//#region plugins/organization-rbac/models/OrganizationUserCompositeRole.d.mts
|
|
@@ -36,60 +26,49 @@ declare const OrganizationCompositeRole: _yongdall_model3.ModelTable<{
|
|
|
36
26
|
* @property {string} roleId - 角色ID,主键第三部分
|
|
37
27
|
* @property {number} no - 编号
|
|
38
28
|
*/
|
|
39
|
-
declare const OrganizationUserCompositeRole:
|
|
40
|
-
userId:
|
|
41
|
-
organizationId:
|
|
42
|
-
compositeRoleId:
|
|
43
|
-
createdAt:
|
|
44
|
-
updatedAt:
|
|
29
|
+
export declare const OrganizationUserCompositeRole: import("@yongdall/model").ModelTable<{
|
|
30
|
+
userId: import("imodel").FieldDefine<"uuid", false, false>;
|
|
31
|
+
organizationId: import("imodel").FieldDefine<"uuid", false, false>;
|
|
32
|
+
compositeRoleId: import("imodel").FieldDefine<"uuid", false, false>;
|
|
33
|
+
createdAt: import("imodel").FieldDefine<"timestamp", false, false>;
|
|
34
|
+
updatedAt: import("imodel").FieldDefine<"timestamp", false, false>;
|
|
45
35
|
}, "organizationUserCompositeRole">;
|
|
46
36
|
//#endregion
|
|
47
37
|
//#region plugins/organization-rbac/models/OrganizationAppointment.d.mts
|
|
48
|
-
declare const OrganizationAppointment:
|
|
49
|
-
id:
|
|
50
|
-
label:
|
|
51
|
-
description:
|
|
52
|
-
createdAt:
|
|
53
|
-
updatedAt:
|
|
38
|
+
export declare const OrganizationAppointment: import("@yongdall/model").ModelTable<{
|
|
39
|
+
id: import("imodel").FieldDefine<"uuid", false, false>;
|
|
40
|
+
label: import("imodel").FieldDefine<"string", false, false>;
|
|
41
|
+
description: import("imodel").FieldDefine<"string", false, true>;
|
|
42
|
+
createdAt: import("imodel").FieldDefine<"timestamp", false, false>;
|
|
43
|
+
updatedAt: import("imodel").FieldDefine<"timestamp", false, false>;
|
|
54
44
|
}, "organizationAppointment">;
|
|
55
45
|
//#endregion
|
|
56
46
|
//#region plugins/organization-rbac/models/OrganizationMember.d.mts
|
|
57
|
-
declare const OrganizationMember:
|
|
58
|
-
id:
|
|
59
|
-
userId:
|
|
60
|
-
organizationId:
|
|
61
|
-
appointmentId:
|
|
62
|
-
default:
|
|
63
|
-
createdAt:
|
|
64
|
-
updatedAt:
|
|
47
|
+
export declare const OrganizationMember: import("@yongdall/model").ModelTable<{
|
|
48
|
+
id: import("imodel").FieldDefine<"uuid", false, false>;
|
|
49
|
+
userId: import("imodel").FieldDefine<"uuid", false, false>;
|
|
50
|
+
organizationId: import("imodel").FieldDefine<"uuid", false, false>;
|
|
51
|
+
appointmentId: import("imodel").FieldDefine<"uuid", false, true>;
|
|
52
|
+
default: import("imodel").FieldDefine<"bool", false, false>;
|
|
53
|
+
createdAt: import("imodel").FieldDefine<"timestamp", false, false>;
|
|
54
|
+
updatedAt: import("imodel").FieldDefine<"timestamp", false, false>;
|
|
65
55
|
}, "organizationMember">;
|
|
66
56
|
//#endregion
|
|
67
57
|
//#region plugins/organization-rbac/models/OrganizationUserRole.d.mts
|
|
68
|
-
declare const OrganizationUserRole:
|
|
69
|
-
userId:
|
|
70
|
-
organizationId:
|
|
71
|
-
roleId:
|
|
72
|
-
createdAt:
|
|
58
|
+
export declare const OrganizationUserRole: import("@yongdall/model").ModelTable<{
|
|
59
|
+
userId: import("imodel").FieldDefine<"uuid", false, false>;
|
|
60
|
+
organizationId: import("imodel").FieldDefine<"uuid", false, false>;
|
|
61
|
+
roleId: import("imodel").FieldDefine<"uuid", false, false>;
|
|
62
|
+
createdAt: import("imodel").FieldDefine<"timestamp", false, false>;
|
|
73
63
|
}, "organizationUserRole">;
|
|
74
64
|
//#endregion
|
|
75
65
|
//#region plugins/organization-rbac/index.d.mts
|
|
76
66
|
/** 所在组织 */
|
|
77
|
-
declare const getOrganizations: (userId: string | null) => Promise<Set<unknown>>;
|
|
67
|
+
export declare const getOrganizations: (userId: string | null) => Promise<Set<unknown>>;
|
|
78
68
|
/** 角色 */
|
|
79
|
-
declare const getOrganizationRoleIds: (userId: string | null) => Promise<{
|
|
69
|
+
export declare const getOrganizationRoleIds: (userId: string | null) => Promise<{
|
|
80
70
|
[k: string]: Set<string>;
|
|
81
71
|
}>;
|
|
82
|
-
declare const getOrganizationPermissions: (userId: string | null) => Promise<Record<string, Set<string>>>;
|
|
83
|
-
declare const getOrganizationAllPermissions: (userId: string | null) => Promise<Set<string>>;
|
|
84
|
-
|
|
85
|
-
declare const useOrganizations: () => Promise<Set<unknown>>;
|
|
86
|
-
/** @deprecated */
|
|
87
|
-
declare const useOrganizationRoleIds: () => Promise<{
|
|
88
|
-
[k: string]: Set<string>;
|
|
89
|
-
}>;
|
|
90
|
-
/** @deprecated */
|
|
91
|
-
declare const useOrganizationPermissions: () => Promise<Record<string, Set<string>>>;
|
|
92
|
-
/** @deprecated */
|
|
93
|
-
declare const useOrganizationAllPermissions: () => Promise<Set<string>>;
|
|
94
|
-
//#endregion
|
|
95
|
-
export { CompositeRole, OrganizationAppointment, OrganizationCompositeRole, OrganizationMember, OrganizationUserCompositeRole, OrganizationUserRole, getOrganizationAllPermissions, getOrganizationPermissions, getOrganizationRoleIds, getOrganizations, useOrganizationAllPermissions, useOrganizationPermissions, useOrganizationRoleIds, useOrganizations };
|
|
72
|
+
export declare const getOrganizationPermissions: (userId: string | null) => Promise<Record<string, Set<string>>>;
|
|
73
|
+
export declare const getOrganizationAllPermissions: (userId: string | null) => Promise<Set<string>>;
|
|
74
|
+
//#endregion
|
package/index.mjs
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import { a as
|
|
2
|
-
|
|
3
|
-
export { CompositeRole, OrganizationAppointment, OrganizationCompositeRole, OrganizationMember, OrganizationUserCompositeRole, OrganizationUserRole, getOrganizationAllPermissions, getOrganizationPermissions, getOrganizationRoleIds, getOrganizations, useOrganizationAllPermissions, useOrganizationPermissions, useOrganizationRoleIds, useOrganizations };
|
|
1
|
+
import { a as OrganizationUserRole, c as CompositeRole, i as getOrganizations, l as OrganizationUserCompositeRole, n as getOrganizationPermissions, o as OrganizationMember, r as getOrganizationRoleIds, s as OrganizationAppointment, t as getOrganizationAllPermissions, u as OrganizationCompositeRole } from "./organization-rbac-Bbuq32zd.mjs";
|
|
2
|
+
export { CompositeRole, OrganizationAppointment, OrganizationCompositeRole, OrganizationMember, OrganizationUserCompositeRole, OrganizationUserRole, getOrganizationAllPermissions, getOrganizationPermissions, getOrganizationRoleIds, getOrganizations };
|
|
@@ -1,23 +1,13 @@
|
|
|
1
1
|
import { createKeyStore } from "@yongdall/context";
|
|
2
2
|
import { Action, Query, Where, actions, createField, createModel, now, uuid } from "@yongdall/model";
|
|
3
|
-
import { ServerError, getModel
|
|
3
|
+
import { ServerError, getModel } from "@yongdall/core";
|
|
4
4
|
import { useDatabase } from "@yongdall/connection";
|
|
5
5
|
import { findRolePermissions } from "@yongdall/role-permission";
|
|
6
6
|
import PluginMeta from "@yongdall/plugin-meta";
|
|
7
|
-
|
|
8
7
|
//#region plugins/organization-rbac/constants.mts
|
|
9
8
|
const { id: pluginId, database } = PluginMeta();
|
|
10
|
-
|
|
11
9
|
//#endregion
|
|
12
10
|
//#region plugins/organization-rbac/models/OrganizationCompositeRole.mts
|
|
13
|
-
/**
|
|
14
|
-
* 组织用户角色模型
|
|
15
|
-
* @typedef {Object} OrganizationUserRole
|
|
16
|
-
* @property {string} userId - 用户ID,主键第一部分
|
|
17
|
-
* @property {string} organizationId - 组织ID,主键第二部分
|
|
18
|
-
* @property {string} roleId - 角色ID,主键第三部分
|
|
19
|
-
* @property {number} no - 编号
|
|
20
|
-
*/
|
|
21
11
|
const OrganizationCompositeRole = createModel("organizationCompositeRole", {
|
|
22
12
|
compositeRoleId: createField("uuid", {
|
|
23
13
|
nullable: false,
|
|
@@ -26,7 +16,11 @@ const OrganizationCompositeRole = createModel("organizationCompositeRole", {
|
|
|
26
16
|
model: "compositeRole",
|
|
27
17
|
renderer: "document",
|
|
28
18
|
immutable: true,
|
|
29
|
-
primary: 1
|
|
19
|
+
primary: 1,
|
|
20
|
+
bind: { mainOrganizationId: {
|
|
21
|
+
source: "organizationId",
|
|
22
|
+
clear: true
|
|
23
|
+
} }
|
|
30
24
|
}),
|
|
31
25
|
organizationId: createField("uuid", {
|
|
32
26
|
nullable: false,
|
|
@@ -35,7 +29,8 @@ const OrganizationCompositeRole = createModel("organizationCompositeRole", {
|
|
|
35
29
|
model: "organization",
|
|
36
30
|
renderer: "document",
|
|
37
31
|
immutable: true,
|
|
38
|
-
primary: 2
|
|
32
|
+
primary: 2,
|
|
33
|
+
source: { search: "mainId=?mainOrganizationId" }
|
|
39
34
|
}),
|
|
40
35
|
roleId: createField("uuid", {
|
|
41
36
|
nullable: false,
|
|
@@ -46,7 +41,16 @@ const OrganizationCompositeRole = createModel("organizationCompositeRole", {
|
|
|
46
41
|
immutable: true,
|
|
47
42
|
primary: 3
|
|
48
43
|
}),
|
|
49
|
-
|
|
44
|
+
mainOrganizationId: createField("uuid", {
|
|
45
|
+
nullable: false,
|
|
46
|
+
index: true,
|
|
47
|
+
label: "主体组织",
|
|
48
|
+
model: "organization",
|
|
49
|
+
renderer: "document",
|
|
50
|
+
immutable: true,
|
|
51
|
+
layout: { hidden: true }
|
|
52
|
+
}),
|
|
53
|
+
createdAt: createField("timestamp", {
|
|
50
54
|
nullable: false,
|
|
51
55
|
default: now,
|
|
52
56
|
creating: now,
|
|
@@ -78,17 +82,19 @@ const OrganizationCompositeRole = createModel("organizationCompositeRole", {
|
|
|
78
82
|
}],
|
|
79
83
|
database,
|
|
80
84
|
label: "组织复合角色配置",
|
|
81
|
-
hooks: { async
|
|
85
|
+
hooks: { async beforeCreate(conn, model, record) {
|
|
82
86
|
if (!record.organizationId) throw new ServerError("组织不存在");
|
|
83
87
|
if (!record.roleId) throw new ServerError("角色不存在");
|
|
84
88
|
const [compositeRole] = await conn.call(new Query(CompositeRole).where({ id: record.compositeRoleId }).limit(1));
|
|
85
89
|
if (!compositeRole) throw new Error("复合角色不存在");
|
|
86
|
-
|
|
90
|
+
const mainOrganizationId = compositeRole.organizationId || null;
|
|
91
|
+
if (record.mainOrganizationId && record.mainOrganizationId !== mainOrganizationId) throw new ServerError("主体组织不匹配");
|
|
92
|
+
if (!mainOrganizationId) return;
|
|
87
93
|
const organizationModel = await getModel("organization");
|
|
88
94
|
if (organizationModel) {
|
|
89
95
|
const [organization] = await useDatabase(organizationModel.databaseId).call(new Query(organizationModel).where({
|
|
90
96
|
id: record.organizationId,
|
|
91
|
-
mainId:
|
|
97
|
+
mainId: mainOrganizationId
|
|
92
98
|
}).limit(1));
|
|
93
99
|
if (!organization) throw new ServerError("请选择关联组织");
|
|
94
100
|
}
|
|
@@ -100,9 +106,12 @@ const OrganizationCompositeRole = createModel("organizationCompositeRole", {
|
|
|
100
106
|
}).limit(1));
|
|
101
107
|
if (!role) throw new ServerError("请选择有效角色");
|
|
102
108
|
}
|
|
109
|
+
return {
|
|
110
|
+
...record,
|
|
111
|
+
mainOrganizationId
|
|
112
|
+
};
|
|
103
113
|
} }
|
|
104
114
|
});
|
|
105
|
-
|
|
106
115
|
//#endregion
|
|
107
116
|
//#region plugins/organization-rbac/models/OrganizationUserCompositeRole.mts
|
|
108
117
|
/**
|
|
@@ -140,13 +149,13 @@ const OrganizationUserCompositeRole = createModel("organizationUserCompositeRole
|
|
|
140
149
|
immutable: true,
|
|
141
150
|
primary: 2
|
|
142
151
|
}),
|
|
143
|
-
createdAt: createField("
|
|
152
|
+
createdAt: createField("timestamp", {
|
|
144
153
|
nullable: false,
|
|
145
154
|
default: now,
|
|
146
155
|
creating: now,
|
|
147
156
|
label: "创建日期"
|
|
148
157
|
}),
|
|
149
|
-
updatedAt: createField("
|
|
158
|
+
updatedAt: createField("timestamp", {
|
|
150
159
|
nullable: false,
|
|
151
160
|
default: now,
|
|
152
161
|
updating: now,
|
|
@@ -185,7 +194,6 @@ const OrganizationUserCompositeRole = createModel("organizationUserCompositeRole
|
|
|
185
194
|
throw new ServerError("复合角色与组织不匹配");
|
|
186
195
|
} }
|
|
187
196
|
});
|
|
188
|
-
|
|
189
197
|
//#endregion
|
|
190
198
|
//#region plugins/organization-rbac/models/CompositeRole.mts
|
|
191
199
|
const CompositeRole = createModel("compositeRole", {
|
|
@@ -216,13 +224,13 @@ const CompositeRole = createModel("compositeRole", {
|
|
|
216
224
|
nullable: true,
|
|
217
225
|
label: "描述"
|
|
218
226
|
}),
|
|
219
|
-
createdAt: createField("
|
|
227
|
+
createdAt: createField("timestamp", {
|
|
220
228
|
nullable: false,
|
|
221
229
|
default: now,
|
|
222
230
|
creating: now,
|
|
223
231
|
label: "创建日期"
|
|
224
232
|
}),
|
|
225
|
-
updatedAt: createField("
|
|
233
|
+
updatedAt: createField("timestamp", {
|
|
226
234
|
nullable: false,
|
|
227
235
|
default: now,
|
|
228
236
|
updating: now,
|
|
@@ -279,7 +287,6 @@ const CompositeRole = createModel("compositeRole", {
|
|
|
279
287
|
}
|
|
280
288
|
}
|
|
281
289
|
});
|
|
282
|
-
|
|
283
290
|
//#endregion
|
|
284
291
|
//#region plugins/organization-rbac/models/OrganizationAppointment.mts
|
|
285
292
|
const OrganizationAppointment = createModel("organizationAppointment", {
|
|
@@ -298,13 +305,13 @@ const OrganizationAppointment = createModel("organizationAppointment", {
|
|
|
298
305
|
nullable: true,
|
|
299
306
|
label: "描述"
|
|
300
307
|
}),
|
|
301
|
-
createdAt: createField("
|
|
308
|
+
createdAt: createField("timestamp", {
|
|
302
309
|
nullable: false,
|
|
303
310
|
default: now,
|
|
304
311
|
creating: now,
|
|
305
312
|
label: "创建日期"
|
|
306
313
|
}),
|
|
307
|
-
updatedAt: createField("
|
|
314
|
+
updatedAt: createField("timestamp", {
|
|
308
315
|
nullable: false,
|
|
309
316
|
default: now,
|
|
310
317
|
updating: now,
|
|
@@ -326,7 +333,6 @@ const OrganizationAppointment = createModel("organizationAppointment", {
|
|
|
326
333
|
]
|
|
327
334
|
}]
|
|
328
335
|
});
|
|
329
|
-
|
|
330
336
|
//#endregion
|
|
331
337
|
//#region plugins/organization-rbac/models/OrganizationMember.mts
|
|
332
338
|
const OrganizationMember = createModel("organizationMember", {
|
|
@@ -369,13 +375,13 @@ const OrganizationMember = createModel("organizationMember", {
|
|
|
369
375
|
default: false,
|
|
370
376
|
label: "默认职务"
|
|
371
377
|
}),
|
|
372
|
-
createdAt: createField("
|
|
378
|
+
createdAt: createField("timestamp", {
|
|
373
379
|
nullable: false,
|
|
374
380
|
default: now,
|
|
375
381
|
creating: now,
|
|
376
382
|
label: "创建日期"
|
|
377
383
|
}),
|
|
378
|
-
updatedAt: createField("
|
|
384
|
+
updatedAt: createField("timestamp", {
|
|
379
385
|
nullable: false,
|
|
380
386
|
default: now,
|
|
381
387
|
updating: now,
|
|
@@ -416,7 +422,6 @@ const OrganizationMember = createModel("organizationMember", {
|
|
|
416
422
|
}
|
|
417
423
|
}
|
|
418
424
|
});
|
|
419
|
-
|
|
420
425
|
//#endregion
|
|
421
426
|
//#region plugins/organization-rbac/models/OrganizationUserRole.mts
|
|
422
427
|
const OrganizationUserRole = createModel("organizationUserRole", {
|
|
@@ -447,7 +452,7 @@ const OrganizationUserRole = createModel("organizationUserRole", {
|
|
|
447
452
|
immutable: true,
|
|
448
453
|
primary: 3
|
|
449
454
|
}),
|
|
450
|
-
createdAt: createField("
|
|
455
|
+
createdAt: createField("timestamp", {
|
|
451
456
|
nullable: false,
|
|
452
457
|
default: now,
|
|
453
458
|
creating: now,
|
|
@@ -466,7 +471,6 @@ const OrganizationUserRole = createModel("organizationUserRole", {
|
|
|
466
471
|
]
|
|
467
472
|
}]
|
|
468
473
|
});
|
|
469
|
-
|
|
470
474
|
//#endregion
|
|
471
475
|
//#region plugins/organization-rbac/index.mts
|
|
472
476
|
/** 所在组织 */
|
|
@@ -499,15 +503,7 @@ const getOrganizationAllPermissions = createKeyStore(async (userId) => {
|
|
|
499
503
|
const v = await getOrganizationPermissions(userId);
|
|
500
504
|
return new Set(Object.values(v).flatMap((v) => [...v]));
|
|
501
505
|
}, (user) => user || "");
|
|
502
|
-
/** @deprecated */
|
|
503
|
-
const useOrganizations = () => getUser().then(getOrganizations);
|
|
504
|
-
/** @deprecated */
|
|
505
|
-
const useOrganizationRoleIds = () => getUser().then(getOrganizationRoleIds);
|
|
506
|
-
/** @deprecated */
|
|
507
|
-
const useOrganizationPermissions = () => getUser().then(getOrganizationPermissions);
|
|
508
|
-
/** @deprecated */
|
|
509
|
-
const useOrganizationAllPermissions = () => getUser().then(getOrganizationAllPermissions);
|
|
510
|
-
|
|
511
506
|
//#endregion
|
|
512
|
-
export {
|
|
513
|
-
|
|
507
|
+
export { OrganizationUserRole as a, CompositeRole as c, getOrganizations as i, OrganizationUserCompositeRole as l, getOrganizationPermissions as n, OrganizationMember as o, getOrganizationRoleIds as r, OrganizationAppointment as s, getOrganizationAllPermissions as t, OrganizationCompositeRole as u };
|
|
508
|
+
|
|
509
|
+
//# sourceMappingURL=organization-rbac-Bbuq32zd.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organization-rbac-Bbuq32zd.mjs","names":[],"sources":["../../plugins/organization-rbac/constants.mts","../../plugins/organization-rbac/models/OrganizationCompositeRole.mts","../../plugins/organization-rbac/models/OrganizationUserCompositeRole.mts","../../plugins/organization-rbac/models/CompositeRole.mts","../../plugins/organization-rbac/models/OrganizationAppointment.mts","../../plugins/organization-rbac/models/OrganizationMember.mts","../../plugins/organization-rbac/models/OrganizationUserRole.mts","../../plugins/organization-rbac/index.mts"],"sourcesContent":["import PluginMeta from '@yongdall/plugin-meta';\nexport const {\n\tid: pluginId,\n\tdatabase: database,\n} = PluginMeta();\n","import { createField, createModel, now, Query } from '@yongdall/model';\nimport { database } from '../constants.mts';\nimport { CompositeRole } from './CompositeRole.mts';\nimport { getModel, ServerError } from '@yongdall/core';\nimport { useDatabase } from '@yongdall/connection';\n\nexport const OrganizationCompositeRole = createModel('organizationCompositeRole', {\n\tcompositeRoleId: createField('uuid', { nullable: false, index: true, label: '复合角色', model: 'compositeRole', renderer: 'document', immutable: true, primary: 1, bind: {\n\t\tmainOrganizationId: { source: 'organizationId', clear: true },\n\t} }),\n\torganizationId: createField('uuid', { nullable: false, index: true, label: '组织', model: 'organization', renderer: 'document', immutable: true, primary: 2, source: {\n\t\tsearch: 'mainId=?mainOrganizationId'\n\t} }),\n\troleId: createField('uuid', { nullable: false, index: true, label: '角色', model: 'role', renderer: 'document', immutable: true, primary: 3 }),\n\tmainOrganizationId: createField('uuid', { nullable: false, index: true, label: '主体组织', model: 'organization', renderer: 'document', immutable: true, layout: {hidden: true} }),\n\n\tcreatedAt: createField('timestamp', { nullable: false, default: now, creating: now, label: '创建日期' }),\n}, {\n\n\tpermissions: [\n\t\t{ permission: 'system:compositeRole', fields: ['*'], authorizations: ['options', 'query', 'read', 'create', 'destroy'] },\n\t\t{ permission: 'system:compositeRole', organizationField: 'organizationId', fields: ['*'], authorizations: ['options', 'query', 'read', 'create', 'update', 'destroy'] },\n\t],\n\tdatabase,\n\tlabel: '组织复合角色配置',\n\thooks: {\n\t\tasync beforeCreate(conn, model, record) {\n\t\t\tif (!record.organizationId) { throw new ServerError('组织不存在') }\n\t\t\tif (!record.roleId) { throw new ServerError('角色不存在') }\n\t\t\tconst [compositeRole] = await conn.call(\n\t\t\t\tnew Query(CompositeRole).where({ id: record.compositeRoleId }).limit(1)\n\t\t\t)\n\t\t\tif (!compositeRole) {\n\t\t\t\tthrow new Error('复合角色不存在')\n\t\t\t}\n\t\t\tconst mainOrganizationId = compositeRole.organizationId || null;\n\t\t\tif (record.mainOrganizationId && record.mainOrganizationId !== mainOrganizationId) {\n\t\t\t\tthrow new ServerError('主体组织不匹配');\n\t\t\t}\n\t\t\tif (!mainOrganizationId) { return }\n\t\t\tconst organizationModel = await getModel('organization')\n\t\t\tif (organizationModel) {\n\t\t\t\tconst [organization] = await useDatabase(organizationModel.databaseId).call(\n\t\t\t\t\tnew Query(organizationModel).where({ id: record.organizationId, mainId: mainOrganizationId }).limit(1)\n\t\t\t\t)\n\t\t\t\tif (!organization) {\n\t\t\t\t\tthrow new ServerError('请选择关联组织');\n\t\t\t\t}\n\n\t\t\t}\n\t\t\tconst roleModel = await getModel('role')\n\t\t\tif (roleModel?.fields.open) {\n\t\t\t\tconst [role] = await useDatabase(roleModel.databaseId).call(\n\t\t\t\t\tnew Query(roleModel).where({ id: record.organizationId, open: true }).limit(1)\n\t\t\t\t)\n\t\t\t\tif (!role) {\n\t\t\t\t\tthrow new ServerError('请选择有效角色');\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {...record, mainOrganizationId};\n\t\t},\n\t}\n});\n","import { actions, createField, createModel, now, Query, uuid, Where} from '@yongdall/model';\nimport { database } from '../constants.mts';\nimport { CompositeRole } from './CompositeRole.mts';\nimport { ServerError } from '@yongdall/core';\n\n/**\n * 组织用户角色模型\n * @typedef {Object} OrganizationUserRole\n * @property {string} userId - 用户ID,主键第一部分\n * @property {string} organizationId - 组织ID,主键第二部分\n * @property {string} roleId - 角色ID,主键第三部分\n * @property {number} no - 编号\n */\nexport const OrganizationUserCompositeRole = createModel('organizationUserCompositeRole', {\n\tuserId: createField('uuid', { nullable: false, index: true, label: '用户', model: 'user', renderer: 'document', immutable: true, primary: 1 }),\n\torganizationId: createField('uuid', { nullable: false, index: true, label: '组织', model: 'organization', renderer: 'document', immutable: true }),\n\tcompositeRoleId: createField('uuid', { nullable: false, index: true, label: '角色', model: 'compositeRole', renderer: 'document', immutable: true, primary: 2 }),\n\n\tcreatedAt: createField('timestamp', { nullable: false, default: now, creating: now, label: '创建日期' }),\n\tupdatedAt: createField('timestamp', { nullable: false, default: now, updating: now, label: '最后更新日期' }),\n},{\n\tdatabase,\n\tlabel: '用户复合角色',\n\n\tpermissions: [\n\t\t{ permission: 'system:compositeRole', fields: ['*'], authorizations: ['options', 'query', 'read', 'create', 'destroy'] },\n\t\t{ permission: 'system:compositeRole', organizationField: 'organizationId', fields: ['*'], authorizations: ['options', 'query', 'read', 'create', 'update', 'destroy'] },\n\t],\n\thooks: {\n\t\tasync afterCreate(conn, model, record) {\n\t\t\tconst [compositeRole] = await conn.call(\n\t\t\t\tnew Query(CompositeRole).where({ id: record.compositeRoleId }).limit(1)\n\t\t\t)\n\t\t\tif (!compositeRole) {\n\t\t\t\tthrow new ServerError('复合角色不存在')\n\t\t\t}\n\t\t\tif ((compositeRole.organizationId || null) === (record.organizationId || null)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthrow new ServerError('复合角色与组织不匹配');\n\t\t},\n\t}\n});\n","import { Action, actions, createField, createModel, now, Query, uuid, Where } from '@yongdall/model';\nimport { database } from '../constants.mts';\nimport { getModel, ServerError } from '@yongdall/core';\nimport { useDatabase } from '@yongdall/connection';\nimport { OrganizationCompositeRole } from './OrganizationCompositeRole.mts';\nimport { OrganizationUserCompositeRole } from './OrganizationUserCompositeRole.mts';\n\n\nexport const CompositeRole = createModel('compositeRole', {\n\tid: createField('uuid', { nullable: false, default: uuid, primary: 1, uncreatable: true, layout: { hidden: true } }),\n\tlabel: createField('string', { size: 255, nullable: false, default: '', label: '名称', layout: { colSpan: 6 } }),\n\torganizationId: createField('uuid', { nullable: true, index: true, label: '组织', model: 'organization', renderer: 'document', immutable: true, source: { search: 'internal=0' } }),\n\tdescription: createField('text', { nullable: true, label: '描述' }),\n\n\tcreatedAt: createField('timestamp', { nullable: false, default: now, creating: now, label: '创建日期' }),\n\tupdatedAt: createField('timestamp', { nullable: false, default: now, updating: now, label: '最后更新日期' }),\n}, {\n\tdatabase,\n\tlabelField: 'label',\n\tlabel: '复合角色',\n\n\tpermissions: [\n\t\t{ permission: 'system:compositeRole', fields: ['*'], authorizations: ['options', 'query', 'read', 'create', 'update', 'destroy', 'add', 'remove'] },\n\t\t{ permission: 'system:compositeRole', organizationField: 'organizationId', fields: ['*'], authorizations: ['options', 'query', 'read', 'create', 'update', 'destroy', 'add', 'remove'] },\n\t],\n\thooks: {\n\t\tasync afterCreate(conn, model, { organizationId }) {\n\t\t\tif (!organizationId) { return; }\n\t\t\tconst organizationModel = await getModel('organization')\n\t\t\tif (!organizationModel) { return; }\n\t\t\tconst [organization] = await useDatabase(organizationModel.databaseId).call(\n\t\t\t\tnew Query(organizationModel).where({ id: organizationId, internal: false }).limit(1)\n\t\t\t)\n\t\t\tif (organization) { return; }\n\t\t\tthrow new ServerError('请选择外部组织');\n\t\t},\n\t\tasync afterDelete(conn, model, record, update) {\n\t\t\tconst list = [\n\t\t\t\tconn.call(Action.delete(OrganizationUserCompositeRole, Where.and({ compositeRoleId: record.id })))\n\t\t\t]\n\n\t\t\tif (!update) {\n\t\t\t\tlist.push(\n\t\t\t\t\tconn.call(Action.delete(OrganizationCompositeRole, Where.and({ compositeRoleId: record.id })))\n\t\t\t\t)\n\t\t\t}\n\t\t\tawait Promise.all(list)\n\t\t},\n\t}\n});\n","import { createField, createModel, now, uuid } from '@yongdall/model';\nimport { database } from '../constants.mts';\n\n\n\n// export const OrganizationAppointmentRole = createModel('organizationAppointmentRole', {\n// \tappointmentId: createField('uuid', { nullable: false, index: true, label: '职务', model: 'appointment', renderer: 'document', immutable: true, primary: 1 }),\n// \troleId: createField('uuid', { nullable: false, index: true, label: '角色', model: 'role', renderer: 'document', immutable: true, primary: 2 }),\n// \tno: createField('i32', { nullable: false, default: 0 }),\n// });\n\nexport const OrganizationAppointment = createModel('organizationAppointment', {\n\tid: createField('uuid', { nullable: false, primary: 1, default: uuid, uncreatable: true, immutable: true }),\n\n\tlabel: createField('string', { nullable: false, label: '职务名称' }),\n\tdescription: createField('string', { nullable: true, label: '描述' }),\n\n\tcreatedAt: createField('timestamp', { nullable: false, default: now, creating: now, label: '创建日期' }),\n\tupdatedAt: createField('timestamp', { nullable: false, default: now, updating: now, label: '最后更新日期' }),\n\n\t// roles: createField(OrganizationAppointmentRole, { \n\t// \tarray: true, \n\t// \tconstraints: { appointmentId: { field: 'id' }, no: { noField: true } }, \n\t// \tlabel: '角色列表' \n\t// }),\n}, {\n\tdatabase,\n\n\tpermissions: [\n\t\t{ permission: 'system:organization', fields: '*', authorizations: ['query', 'read', 'create', 'update', 'destroy', 'add', 'remove'] },\n\t],\n});\n","import { actions, createField, createModel, now, uuid, Where} from '@yongdall/model';\nimport { database } from '../constants.mts';\n\n\nexport const OrganizationMember = createModel('organizationMember', {\n\tid: createField('uuid', { nullable: false, index: true, primary: 1, default: uuid, uncreatable: true, immutable: true }),\n\n\tuserId: createField('uuid', { nullable: false, index: true, label: '用户', model: 'user', renderer: 'document', immutable: true, layout: { rowSpan: 6 } }),\n\torganizationId: createField('uuid', { nullable: false, index: true, label: '组织', model: 'organization', renderer: 'document', immutable: true, layout: { rowSpan: 6 } }),\n\tappointmentId: createField('uuid', { nullable: true, index: true, label: '职务', model: 'appointment', renderer: 'document', layout: { rowSpan: 6 } }),\n\n\tdefault: createField('bool', { nullable: false, default: false, label: '默认职务' }),\n\n\tcreatedAt: createField('timestamp', { nullable: false, default: now, creating: now, label: '创建日期' }),\n\tupdatedAt: createField('timestamp', { nullable: false, default: now, updating: now, label: '最后更新日期' }),\n\n}, {\n\tdatabase,\n\tindexes: [\n\t\t{ fields: ['userId', 'organizationId', 'appointmentId'], unique: true }\n\t],\n\tpermissions: [\n\t\t{ permission: 'system:user', fields: '*', authorizations: ['query', 'read', 'create', 'update', 'destroy', 'add', 'remove'] },\n\t],\n\thooks: {\n\t\tasync afterCreate(conn, Model, record) {\n\t\t\tif (!record.default) { return }\n\t\t\tawait conn.call(actions.update(\n\t\t\t\tModel,\n\t\t\t\t{ default: false },\n\t\t\t\tWhere.and('organizationId', '=', record.organizationId, true)\n\t\t\t\t\t.and('userId', record.userId),\n\t\t\t));\n\t\t},\n\n\t\tasync afterUpdate(conn, Model, record, oldRecord) {\n\t\t\tif (!record.default) { return }\n\t\t\tif (oldRecord.default) { return }\n\t\t\tawait conn.call(actions.update(\n\t\t\t\tModel,\n\t\t\t\t{ default: false },\n\t\t\t\tWhere.and('organizationId', '=', record.organizationId, true)\n\t\t\t\t\t.and('userId', record.userId),\n\t\t\t));\n\t\t},\n\t}\n});\n","import { actions, createField, createModel, now, uuid, Where} from '@yongdall/model';\nimport { database } from '../constants.mts';\n\nexport const OrganizationUserRole = createModel('organizationUserRole', {\n\tuserId: createField('uuid', { nullable: false, index: true, label: '用户', model: 'user', renderer: 'document', immutable: true, primary: 1 }),\n\torganizationId: createField('uuid', { nullable: false, index: true, label: '组织', model: 'organization', renderer: 'document', immutable: true, primary: 2 }),\n\troleId: createField('uuid', { nullable: false, index: true, label: '角色', model: 'role', renderer: 'document', immutable: true, primary: 3 }),\n\n\n\tcreatedAt: createField('timestamp', { nullable: false, default: now, creating: now, label: '创建日期' }),\n\n},{\n\tdatabase,\n\tpermissions: [\n\t\t{ permission: 'system:user', fields: '*', authorizations: ['query', 'read', 'create', 'destroy'] },\n\t],\n});\n","import { createKeyStore } from '@yongdall/context';\nimport { Query } from '@yongdall/model';\nimport { getUser } from '@yongdall/core';\nimport { useDatabase } from '@yongdall/connection';\nimport { findRolePermissions } from '@yongdall/role-permission';\nimport { OrganizationCompositeRole, OrganizationMember, OrganizationUserCompositeRole, OrganizationUserRole } from './models/index.mts';\n\nexport * from './models/index.mts';\n\n\n/** 所在组织 */\nexport const getOrganizations = createKeyStore(async (userId: string | null) => {\n\tif (!userId) { return new Set(); }\n\tconst relations: { organizationId: string }[] = await useDatabase(OrganizationMember.databaseId).call(\n\t\tnew Query(OrganizationMember).select(['organizationId']).where('userId', userId)\n\t);\n\treturn new Set(relations.map(v => v.organizationId));\n}, user => user || '');\n\n\n/** 角色 */\nexport const getOrganizationRoleIds = createKeyStore(async (userId: string | null) => {\n\tconst compositeRoleIds = new Query(OrganizationUserCompositeRole).select('compositeRoleId').where('userId', '=', userId)\n\tconst list: { organizationId: number; roleId: string; }[][] = await Promise.all([\n\t\tuseDatabase(OrganizationUserRole.databaseId).call(\n\t\t\tnew Query(OrganizationUserRole).select(['organizationId', 'roleId'])\n\t\t\t\t.where('userId', userId)\n\t\t),\n\t\tuseDatabase(OrganizationCompositeRole.databaseId).call(\n\t\t\tnew Query(OrganizationCompositeRole).select(['organizationId', 'roleId'])\n\t\t\t\t.where('compositeRoleId', 'in', compositeRoleIds)\n\t\t)\n\t]);\n\n\treturn Object.fromEntries((Object.entries(Object.groupBy(list.flat(), v => v.organizationId))\n\t\t.map(([organizationId, list]) => [organizationId, new Set(list?.map(v => v.roleId))])))\n}, user => user || '');\n\n\nexport const getOrganizationPermissions = createKeyStore(async (userId: string | null) => {\n\tconst roleIds = await getOrganizationRoleIds(userId)\n\tconst allRoleIds = [...new Set(Object.values(roleIds).flatMap(v => [...v]))];\n\tconst permissions: Record<string, Set<string>> = Object.create(null);\n\tif (!allRoleIds.length) { return permissions; }\n\tconst values = await findRolePermissions(allRoleIds);\n\tconst list = Object.fromEntries(Object.entries(Object.groupBy(values, l => l.roleId)).map(([k, v]) => [k, v?.map(v => v.permission)]));\n\tfor (const [organization, roleSet] of Object.entries(roleIds)) {\n\t\tconst s = new Set([...roleSet].flatMap(v => list[v] || []));\n\t\tif (!s.size) { continue; }\n\t\tpermissions[organization] = s;\n\t}\n\treturn permissions;\n}, user => user || '');\n\n\n\nexport const getOrganizationAllPermissions = createKeyStore(async (userId: string | null) => {\n\tconst v = await getOrganizationPermissions(userId)\n\treturn new Set(Object.values(v).flatMap(v => [...v]));\n}, user => user || '');\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yongdall/organization-rbac",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./index.mjs",
|
|
6
6
|
"exports": {
|
|
@@ -11,15 +11,15 @@
|
|
|
11
11
|
"author": "",
|
|
12
12
|
"license": "ISC",
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@yongdall/connection": "^0.
|
|
15
|
-
"@yongdall/context": "^0.
|
|
16
|
-
"@yongdall/core": "^0.
|
|
17
|
-
"@yongdall/model": "^0.
|
|
18
|
-
"@yongdall/plugin-meta": "^0.
|
|
19
|
-
"@yongdall/role-permission": "^0.
|
|
14
|
+
"@yongdall/connection": "^0.7.0",
|
|
15
|
+
"@yongdall/context": "^0.7.0",
|
|
16
|
+
"@yongdall/core": "^0.7.0",
|
|
17
|
+
"@yongdall/model": "^0.7.0",
|
|
18
|
+
"@yongdall/plugin-meta": "^0.7.0",
|
|
19
|
+
"@yongdall/role-permission": "^0.7.0"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
|
-
"@yongdall/migrate": "^0.
|
|
23
|
-
"@yongdall/types": "^0.
|
|
22
|
+
"@yongdall/migrate": "^0.7.0",
|
|
23
|
+
"@yongdall/types": "^0.7.0"
|
|
24
24
|
}
|
|
25
25
|
}
|
package/yongdall/migration.mjs
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { a as OrganizationUserRole, c as CompositeRole, l as OrganizationUserCompositeRole, o as OrganizationMember, s as OrganizationAppointment, u as OrganizationCompositeRole } from "../organization-rbac-Bbuq32zd.mjs";
|
|
3
2
|
//#region plugins/organization-rbac/yongdall/migration.mts
|
|
4
|
-
/** @import { Profile } from '@yongdall/migrate' */
|
|
5
|
-
/** @type {Profile['models']} */
|
|
6
3
|
const models = [
|
|
7
4
|
OrganizationAppointment,
|
|
8
5
|
OrganizationMember,
|
|
6
|
+
OrganizationUserRole,
|
|
9
7
|
CompositeRole,
|
|
10
8
|
OrganizationCompositeRole,
|
|
11
9
|
OrganizationUserCompositeRole
|
|
12
10
|
];
|
|
13
|
-
|
|
14
11
|
//#endregion
|
|
15
12
|
export { models };
|
|
13
|
+
|
|
16
14
|
//# sourceMappingURL=migration.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration.mjs","names":[],"sources":["../../../plugins/organization-rbac/yongdall/migration.mts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"migration.mjs","names":[],"sources":["../../../plugins/organization-rbac/yongdall/migration.mts"],"sourcesContent":["import type { Profile } from '@yongdall/migrate';\nimport {\n\tCompositeRole,\n\tOrganizationAppointment,\n\tOrganizationCompositeRole,\n\tOrganizationMember,\n\tOrganizationUserCompositeRole,\n\tOrganizationUserRole,\n} from '../index.mts';\n\n\nexport const models: Profile['models'] = [\n\tOrganizationAppointment,\n\tOrganizationMember,\n\tOrganizationUserRole,\n\tCompositeRole,\n\tOrganizationCompositeRole,\n\tOrganizationUserCompositeRole,\n];\n"],"mappings":";;AAWA,MAAa,SAA4B;CACxC;CACA;CACA;CACA;CACA;CACA;AACD"}
|
package/yongdall/model.mjs
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { a as OrganizationUserRole, c as CompositeRole, l as OrganizationUserCompositeRole, o as OrganizationMember, s as OrganizationAppointment, u as OrganizationCompositeRole } from "../organization-rbac-Bbuq32zd.mjs";
|
|
3
2
|
//#region plugins/organization-rbac/yongdall/model.mts
|
|
4
|
-
/** @import { ModelProfile } from '@yongdall/core' */
|
|
5
|
-
/** @type {ModelProfile['models']} */
|
|
6
3
|
const models = {
|
|
7
4
|
organizationAppointment: OrganizationAppointment,
|
|
8
5
|
organizationMember: OrganizationMember,
|
|
6
|
+
organizationUserRole: OrganizationUserRole,
|
|
9
7
|
compositeRole: CompositeRole,
|
|
10
8
|
organizationCompositeRole: OrganizationCompositeRole,
|
|
11
9
|
organizationUserCompositeRole: OrganizationUserCompositeRole
|
|
12
10
|
};
|
|
13
|
-
|
|
14
11
|
//#endregion
|
|
15
12
|
export { models };
|
|
13
|
+
|
|
16
14
|
//# sourceMappingURL=model.mjs.map
|
package/yongdall/model.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.mjs","names":[],"sources":["../../../plugins/organization-rbac/yongdall/model.mts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"model.mjs","names":[],"sources":["../../../plugins/organization-rbac/yongdall/model.mts"],"sourcesContent":["import type { ModelProfile } from '@yongdall/core';\nimport {\n\tCompositeRole,\n\tOrganizationAppointment,\n\tOrganizationCompositeRole,\n\tOrganizationMember,\n\tOrganizationUserCompositeRole,\n\tOrganizationUserRole,\n} from '../index.mts';\n\nexport const models: ModelProfile['models'] = {\n\torganizationAppointment: OrganizationAppointment,\n\torganizationMember: OrganizationMember,\n\torganizationUserRole: OrganizationUserRole,\n\tcompositeRole: CompositeRole,\n\torganizationCompositeRole: OrganizationCompositeRole,\n\torganizationUserCompositeRole: OrganizationUserCompositeRole,\n};\n"],"mappings":";;AAUA,MAAa,SAAiC;CAC7C,yBAAyB;CACzB,oBAAoB;CACpB,sBAAsB;CACtB,eAAe;CACf,2BAA2B;CAC3B,+BAA+B;AAChC"}
|
package/yongdall/user.mjs
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import { n as getOrganizationPermissions, t as getOrganizationAllPermissions } from "../organization-rbac-
|
|
2
|
-
|
|
3
|
-
export { getOrganizationAllPermissions, getOrganizationPermissions };
|
|
1
|
+
import { n as getOrganizationPermissions, t as getOrganizationAllPermissions } from "../organization-rbac-Bbuq32zd.mjs";
|
|
2
|
+
export { getOrganizationAllPermissions, getOrganizationPermissions };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"organization-rbac-CVRP1FKi.mjs","names":[],"sources":["../../plugins/organization-rbac/constants.mts","../../plugins/organization-rbac/models/OrganizationCompositeRole.mts","../../plugins/organization-rbac/models/OrganizationUserCompositeRole.mts","../../plugins/organization-rbac/models/CompositeRole.mts","../../plugins/organization-rbac/models/OrganizationAppointment.mts","../../plugins/organization-rbac/models/OrganizationMember.mts","../../plugins/organization-rbac/models/OrganizationUserRole.mts","../../plugins/organization-rbac/index.mts"],"sourcesContent":["import PluginMeta from '@yongdall/plugin-meta';\nexport const {\n\tid: pluginId,\n\tdatabase: database,\n} = PluginMeta();\n","import { actions, createField, createModel, now, Query, uuid, Where } from '@yongdall/model';\nimport { database } from '../constants.mts';\nimport { CompositeRole } from './CompositeRole.mts';\nimport { getModel, ServerError } from '@yongdall/core';\nimport { useDatabase } from '@yongdall/connection';\n\n/**\n * 组织用户角色模型\n * @typedef {Object} OrganizationUserRole\n * @property {string} userId - 用户ID,主键第一部分\n * @property {string} organizationId - 组织ID,主键第二部分\n * @property {string} roleId - 角色ID,主键第三部分\n * @property {number} no - 编号\n */\nexport const OrganizationCompositeRole = createModel('organizationCompositeRole', {\n\tcompositeRoleId: createField('uuid', { nullable: false, index: true, label: '复合角色', model: 'compositeRole', renderer: 'document', immutable: true, primary: 1 }),\n\torganizationId: createField('uuid', { nullable: false, index: true, label: '组织', model: 'organization', renderer: 'document', immutable: true, primary: 2 }),\n\troleId: createField('uuid', { nullable: false, index: true, label: '角色', model: 'role', renderer: 'document', immutable: true, primary: 3 }),\n\n\tcreatedAt: createField('date', { nullable: false, default: now, creating: now, label: '创建日期' }),\n}, {\n\n\tpermissions: [\n\t\t{ permission: 'system:compositeRole', fields: ['*'], authorizations: ['options', 'query', 'read', 'create', 'destroy'] },\n\t\t{ permission: 'system:compositeRole', organizationField: 'organizationId', fields: ['*'], authorizations: ['options', 'query', 'read', 'create', 'update', 'destroy'] },\n\t],\n\tdatabase,\n\tlabel: '组织复合角色配置',\n\thooks: {\n\t\tasync afterCreate(conn, model, record) {\n\t\t\tif (!record.organizationId) { throw new ServerError('组织不存在') }\n\t\t\tif (!record.roleId) { throw new ServerError('角色不存在') }\n\t\t\tconst [compositeRole] = await conn.call(\n\t\t\t\tnew Query(CompositeRole).where({ id: record.compositeRoleId }).limit(1)\n\t\t\t)\n\t\t\tif (!compositeRole) {\n\t\t\t\tthrow new Error('复合角色不存在')\n\t\t\t}\n\t\t\tif (!compositeRole.organizationId) { return }\n\t\t\tconst organizationModel = await getModel('organization')\n\t\t\tif (organizationModel) {\n\t\t\t\tconst [organization] = await useDatabase(organizationModel.databaseId).call(\n\t\t\t\t\tnew Query(organizationModel).where({ id: record.organizationId, mainId: compositeRole.organizationId }).limit(1)\n\t\t\t\t)\n\t\t\t\tif (!organization) {\n\t\t\t\t\tthrow new ServerError('请选择关联组织');\n\t\t\t\t}\n\n\t\t\t}\n\t\t\tconst roleModel = await getModel('role')\n\t\t\tif (roleModel?.fields.open) {\n\t\t\t\tconst [role] = await useDatabase(roleModel.databaseId).call(\n\t\t\t\t\tnew Query(roleModel).where({ id: record.organizationId, open: true }).limit(1)\n\t\t\t\t)\n\t\t\t\tif (!role) {\n\t\t\t\t\tthrow new ServerError('请选择有效角色');\n\t\t\t\t}\n\n\t\t\t}\n\t\t},\n\t}\n});\n","import { actions, createField, createModel, now, Query, uuid, Where} from '@yongdall/model';\nimport { database } from '../constants.mts';\nimport { CompositeRole } from './CompositeRole.mts';\nimport { ServerError } from '@yongdall/core';\n\n/**\n * 组织用户角色模型\n * @typedef {Object} OrganizationUserRole\n * @property {string} userId - 用户ID,主键第一部分\n * @property {string} organizationId - 组织ID,主键第二部分\n * @property {string} roleId - 角色ID,主键第三部分\n * @property {number} no - 编号\n */\nexport const OrganizationUserCompositeRole = createModel('organizationUserCompositeRole', {\n\tuserId: createField('uuid', { nullable: false, index: true, label: '用户', model: 'user', renderer: 'document', immutable: true, primary: 1 }),\n\torganizationId: createField('uuid', { nullable: false, index: true, label: '组织', model: 'organization', renderer: 'document', immutable: true }),\n\tcompositeRoleId: createField('uuid', { nullable: false, index: true, label: '角色', model: 'compositeRole', renderer: 'document', immutable: true, primary: 2 }),\n\n\tcreatedAt: createField('date', { nullable: false, default: now, creating: now, label: '创建日期' }),\n\tupdatedAt: createField('date', { nullable: false, default: now, updating: now, label: '最后更新日期' }),\n},{\n\tdatabase,\n\tlabel: '用户复合角色',\n\n\tpermissions: [\n\t\t{ permission: 'system:compositeRole', fields: ['*'], authorizations: ['options', 'query', 'read', 'create', 'destroy'] },\n\t\t{ permission: 'system:compositeRole', organizationField: 'organizationId', fields: ['*'], authorizations: ['options', 'query', 'read', 'create', 'update', 'destroy'] },\n\t],\n\thooks: {\n\t\tasync afterCreate(conn, model, record) {\n\t\t\tconst [compositeRole] = await conn.call(\n\t\t\t\tnew Query(CompositeRole).where({ id: record.compositeRoleId }).limit(1)\n\t\t\t)\n\t\t\tif (!compositeRole) {\n\t\t\t\tthrow new ServerError('复合角色不存在')\n\t\t\t}\n\t\t\tif ((compositeRole.organizationId || null) === (record.organizationId || null)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthrow new ServerError('复合角色与组织不匹配');\n\t\t},\n\t}\n});\n","import { Action, actions, createField, createModel, now, Query, uuid, Where } from '@yongdall/model';\nimport { database } from '../constants.mts';\nimport { getModel, ServerError } from '@yongdall/core';\nimport { useDatabase } from '@yongdall/connection';\nimport { OrganizationCompositeRole } from './OrganizationCompositeRole.mts';\nimport { OrganizationUserCompositeRole } from './OrganizationUserCompositeRole.mts';\n\n\nexport const CompositeRole = createModel('compositeRole', {\n\tid: createField('uuid', { nullable: false, default: uuid, primary: 1, uncreatable: true, layout: { hidden: true } }),\n\tlabel: createField('string', { size: 255, nullable: false, default: '', label: '名称', layout: { colSpan: 6 } }),\n\torganizationId: createField('uuid', { nullable: true, index: true, label: '组织', model: 'organization', renderer: 'document', immutable: true, source: { search: 'internal=0' } }),\n\tdescription: createField('text', { nullable: true, label: '描述' }),\n\n\tcreatedAt: createField('date', { nullable: false, default: now, creating: now, label: '创建日期' }),\n\tupdatedAt: createField('date', { nullable: false, default: now, updating: now, label: '最后更新日期' }),\n}, {\n\tdatabase,\n\tlabelField: 'label',\n\tlabel: '复合角色',\n\n\tpermissions: [\n\t\t{ permission: 'system:compositeRole', fields: ['*'], authorizations: ['options', 'query', 'read', 'create', 'update', 'destroy', 'add', 'remove'] },\n\t\t{ permission: 'system:compositeRole', organizationField: 'organizationId', fields: ['*'], authorizations: ['options', 'query', 'read', 'create', 'update', 'destroy', 'add', 'remove'] },\n\t],\n\thooks: {\n\t\tasync afterCreate(conn, model, { organizationId }) {\n\t\t\tif (!organizationId) { return; }\n\t\t\tconst organizationModel = await getModel('organization')\n\t\t\tif (!organizationModel) { return; }\n\t\t\tconst [organization] = await useDatabase(organizationModel.databaseId).call(\n\t\t\t\tnew Query(organizationModel).where({ id: organizationId, internal: false }).limit(1)\n\t\t\t)\n\t\t\tif (organization) { return; }\n\t\t\tthrow new ServerError('请选择外部组织');\n\t\t},\n\t\tasync afterDelete(conn, model, record, update) {\n\t\t\tconst list = [\n\t\t\t\tconn.call(Action.delete(OrganizationUserCompositeRole, Where.and({ compositeRoleId: record.id })))\n\t\t\t]\n\n\t\t\tif (!update) {\n\t\t\t\tlist.push(\n\t\t\t\t\tconn.call(Action.delete(OrganizationCompositeRole, Where.and({ compositeRoleId: record.id })))\n\t\t\t\t)\n\t\t\t}\n\t\t\tawait Promise.all(list)\n\t\t},\n\t}\n});\n","import { createField, createModel, now, uuid } from '@yongdall/model';\nimport { database } from '../constants.mts';\n\n\n\n// export const OrganizationAppointmentRole = createModel('organizationAppointmentRole', {\n// \tappointmentId: createField('uuid', { nullable: false, index: true, label: '职务', model: 'appointment', renderer: 'document', immutable: true, primary: 1 }),\n// \troleId: createField('uuid', { nullable: false, index: true, label: '角色', model: 'role', renderer: 'document', immutable: true, primary: 2 }),\n// \tno: createField('i32', { nullable: false, default: 0 }),\n// });\n\nexport const OrganizationAppointment = createModel('organizationAppointment', {\n\tid: createField('uuid', { nullable: false, primary: 1, default: uuid, uncreatable: true, immutable: true }),\n\n\tlabel: createField('string', { nullable: false, label: '职务名称' }),\n\tdescription: createField('string', { nullable: true, label: '描述' }),\n\n\tcreatedAt: createField('date', { nullable: false, default: now, creating: now, label: '创建日期' }),\n\tupdatedAt: createField('date', { nullable: false, default: now, updating: now, label: '最后更新日期' }),\n\n\t// roles: createField(OrganizationAppointmentRole, { \n\t// \tarray: true, \n\t// \tconstraints: { appointmentId: { field: 'id' }, no: { noField: true } }, \n\t// \tlabel: '角色列表' \n\t// }),\n}, {\n\tdatabase,\n\n\tpermissions: [\n\t\t{ permission: 'system:organization', fields: '*', authorizations: ['query', 'read', 'create', 'update', 'destroy', 'add', 'remove'] },\n\t],\n});\n","import { actions, createField, createModel, now, uuid, Where} from '@yongdall/model';\nimport { database } from '../constants.mts';\n\n\nexport const OrganizationMember = createModel('organizationMember', {\n\tid: createField('uuid', { nullable: false, index: true, primary: 1, default: uuid, uncreatable: true, immutable: true }),\n\n\tuserId: createField('uuid', { nullable: false, index: true, label: '用户', model: 'user', renderer: 'document', immutable: true, layout: { rowSpan: 6 } }),\n\torganizationId: createField('uuid', { nullable: false, index: true, label: '组织', model: 'organization', renderer: 'document', immutable: true, layout: { rowSpan: 6 } }),\n\tappointmentId: createField('uuid', { nullable: true, index: true, label: '职务', model: 'appointment', renderer: 'document', layout: { rowSpan: 6 } }),\n\n\tdefault: createField('bool', { nullable: false, default: false, label: '默认职务' }),\n\n\tcreatedAt: createField('date', { nullable: false, default: now, creating: now, label: '创建日期' }),\n\tupdatedAt: createField('date', { nullable: false, default: now, updating: now, label: '最后更新日期' }),\n\n}, {\n\tdatabase,\n\tindexes: [\n\t\t{ fields: ['userId', 'organizationId', 'appointmentId'], unique: true }\n\t],\n\tpermissions: [\n\t\t{ permission: 'system:user', fields: '*', authorizations: ['query', 'read', 'create', 'update', 'destroy', 'add', 'remove'] },\n\t],\n\thooks: {\n\t\tasync afterCreate(conn, Model, record) {\n\t\t\tif (!record.default) { return }\n\t\t\tawait conn.call(actions.update(\n\t\t\t\tModel,\n\t\t\t\t{ default: false },\n\t\t\t\tWhere.and('organizationId', '=', record.organizationId, true)\n\t\t\t\t\t.and('userId', record.userId),\n\t\t\t));\n\t\t},\n\n\t\tasync afterUpdate(conn, Model, record, oldRecord) {\n\t\t\tif (!record.default) { return }\n\t\t\tif (oldRecord.default) { return }\n\t\t\tawait conn.call(actions.update(\n\t\t\t\tModel,\n\t\t\t\t{ default: false },\n\t\t\t\tWhere.and('organizationId', '=', record.organizationId, true)\n\t\t\t\t\t.and('userId', record.userId),\n\t\t\t));\n\t\t},\n\t}\n});\n","import { actions, createField, createModel, now, uuid, Where} from '@yongdall/model';\nimport { database } from '../constants.mts';\n\nexport const OrganizationUserRole = createModel('organizationUserRole', {\n\tuserId: createField('uuid', { nullable: false, index: true, label: '用户', model: 'user', renderer: 'document', immutable: true, primary: 1 }),\n\torganizationId: createField('uuid', { nullable: false, index: true, label: '组织', model: 'organization', renderer: 'document', immutable: true, primary: 2 }),\n\troleId: createField('uuid', { nullable: false, index: true, label: '角色', model: 'role', renderer: 'document', immutable: true, primary: 3 }),\n\n\n\tcreatedAt: createField('date', { nullable: false, default: now, creating: now, label: '创建日期' }),\n\n},{\n\tdatabase,\n\tpermissions: [\n\t\t{ permission: 'system:user', fields: '*', authorizations: ['query', 'read', 'create', 'destroy'] },\n\t],\n});\n","import { createKeyStore } from '@yongdall/context';\nimport { Query } from '@yongdall/model';\nimport { getUser } from '@yongdall/core';\nimport { useDatabase } from '@yongdall/connection';\nimport { findRolePermissions } from '@yongdall/role-permission';\nimport { OrganizationCompositeRole, OrganizationMember, OrganizationUserCompositeRole, OrganizationUserRole } from './models/index.mts';\n\nexport * from './models/index.mts';\n\n\n/** 所在组织 */\nexport const getOrganizations = createKeyStore(async (userId: string | null) => {\n\tif (!userId) { return new Set(); }\n\tconst relations: { organizationId: string }[] = await useDatabase(OrganizationMember.databaseId).call(\n\t\tnew Query(OrganizationMember).select(['organizationId']).where('userId', userId)\n\t);\n\treturn new Set(relations.map(v => v.organizationId));\n}, user => user || '');\n\n\n/** 角色 */\nexport const getOrganizationRoleIds = createKeyStore(async (userId: string | null) => {\n\tconst compositeRoleIds = new Query(OrganizationUserCompositeRole).select('compositeRoleId').where('userId', '=', userId)\n\tconst list: { organizationId: number; roleId: string; }[][] = await Promise.all([\n\t\tuseDatabase(OrganizationUserRole.databaseId).call(\n\t\t\tnew Query(OrganizationUserRole).select(['organizationId', 'roleId'])\n\t\t\t\t.where('userId', userId)\n\t\t),\n\t\tuseDatabase(OrganizationCompositeRole.databaseId).call(\n\t\t\tnew Query(OrganizationCompositeRole).select(['organizationId', 'roleId'])\n\t\t\t\t.where('compositeRoleId', 'in', compositeRoleIds)\n\t\t)\n\t]);\n\n\treturn Object.fromEntries((Object.entries(Object.groupBy(list.flat(), v => v.organizationId))\n\t\t.map(([organizationId, list]) => [organizationId, new Set(list?.map(v => v.roleId))])))\n}, user => user || '');\n\n\nexport const getOrganizationPermissions = createKeyStore(async (userId: string | null) => {\n\tconst roleIds = await getOrganizationRoleIds(userId)\n\tconst allRoleIds = [...new Set(Object.values(roleIds).flatMap(v => [...v]))];\n\tconst permissions: Record<string, Set<string>> = Object.create(null);\n\tif (!allRoleIds.length) { return permissions; }\n\tconst values = await findRolePermissions(allRoleIds);\n\tconst list = Object.fromEntries(Object.entries(Object.groupBy(values, l => l.roleId)).map(([k, v]) => [k, v?.map(v => v.permission)]));\n\tfor (const [organization, roleSet] of Object.entries(roleIds)) {\n\t\tconst s = new Set([...roleSet].flatMap(v => list[v] || []));\n\t\tif (!s.size) { continue; }\n\t\tpermissions[organization] = s;\n\t}\n\treturn permissions;\n}, user => user || '');\n\n\n\nexport const getOrganizationAllPermissions = createKeyStore(async (userId: string | null) => {\n\tconst v = await getOrganizationPermissions(userId)\n\treturn new Set(Object.values(v).flatMap(v => [...v]));\n}, user => user || '');\n\n/** @deprecated */\nexport const useOrganizations = () => getUser().then(getOrganizations);\n/** @deprecated */\nexport const useOrganizationRoleIds = () => getUser().then(getOrganizationRoleIds);\n/** @deprecated */\nexport const useOrganizationPermissions = () => getUser().then(getOrganizationPermissions);\n/** @deprecated */\nexport const useOrganizationAllPermissions = () => getUser().then(getOrganizationAllPermissions);\n"],"mappings":"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"}
|