@yongdall/organization-rbac 0.4.3 → 0.5.0
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.mjs +1 -1
- package/{organization-rbac-BmLEDpJH.mjs → organization-rbac-B8x_aDQj.mjs} +27 -2
- package/organization-rbac-B8x_aDQj.mjs.map +1 -0
- package/package.json +8 -7
- package/yongdall/migration.mjs +15 -0
- package/yongdall/migration.mjs.map +1 -0
- package/yongdall/model.mjs +15 -0
- package/yongdall/model.mjs.map +1 -0
- package/yongdall/user.mjs +16 -0
- package/yongdall/user.mjs.map +1 -0
- package/yongdall.plugin.yml +1 -0
- package/hooks.yongdall.mjs +0 -30
- package/hooks.yongdall.mjs.map +0 -1
- package/organization-rbac-BmLEDpJH.mjs.map +0 -1
package/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { a as OrganizationMember, i as useOrganizations, n as useOrganizationPermissions, o as OrganizationUserRole, r as useOrganizationRoleIds, s as OrganizationAppointment, t as useOrganizationAllPermissions } from "./organization-rbac-
|
|
1
|
+
import { a as OrganizationMember, i as useOrganizations, n as useOrganizationPermissions, o as OrganizationUserRole, r as useOrganizationRoleIds, s as OrganizationAppointment, t as useOrganizationAllPermissions } from "./organization-rbac-B8x_aDQj.mjs";
|
|
2
2
|
|
|
3
3
|
export { OrganizationAppointment, OrganizationMember, OrganizationUserRole, useOrganizationAllPermissions, useOrganizationPermissions, useOrganizationRoleIds, useOrganizations };
|
|
@@ -32,7 +32,19 @@ const OrganizationAppointment = createModel("organizationAppointment", {
|
|
|
32
32
|
updating: now,
|
|
33
33
|
label: "最后更新日期"
|
|
34
34
|
})
|
|
35
|
-
}
|
|
35
|
+
}, { permissions: [{
|
|
36
|
+
permission: "system:organization",
|
|
37
|
+
fields: "*",
|
|
38
|
+
authorizations: [
|
|
39
|
+
"query",
|
|
40
|
+
"read",
|
|
41
|
+
"create",
|
|
42
|
+
"update",
|
|
43
|
+
"destroy",
|
|
44
|
+
"add",
|
|
45
|
+
"remove"
|
|
46
|
+
]
|
|
47
|
+
}] });
|
|
36
48
|
|
|
37
49
|
//#endregion
|
|
38
50
|
//#region plugins/organization-rbac/models/OrganizationMember.mjs
|
|
@@ -145,6 +157,19 @@ const OrganizationMember = createModel("organizationMember", {
|
|
|
145
157
|
],
|
|
146
158
|
unique: true
|
|
147
159
|
}],
|
|
160
|
+
permissions: [{
|
|
161
|
+
permission: "system:user",
|
|
162
|
+
fields: "*",
|
|
163
|
+
authorizations: [
|
|
164
|
+
"query",
|
|
165
|
+
"read",
|
|
166
|
+
"create",
|
|
167
|
+
"update",
|
|
168
|
+
"destroy",
|
|
169
|
+
"add",
|
|
170
|
+
"remove"
|
|
171
|
+
]
|
|
172
|
+
}],
|
|
148
173
|
hooks: {
|
|
149
174
|
async afterCreate(conn, Model, record) {
|
|
150
175
|
if (!record.default) return;
|
|
@@ -211,4 +236,4 @@ const useOrganizationAllPermissions = createComputed(async () => {
|
|
|
211
236
|
|
|
212
237
|
//#endregion
|
|
213
238
|
export { OrganizationMember as a, useOrganizations as i, useOrganizationPermissions as n, OrganizationUserRole as o, useOrganizationRoleIds as r, OrganizationAppointment as s, useOrganizationAllPermissions as t };
|
|
214
|
-
//# sourceMappingURL=organization-rbac-
|
|
239
|
+
//# sourceMappingURL=organization-rbac-B8x_aDQj.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organization-rbac-B8x_aDQj.mjs","names":[],"sources":["../../plugins/organization-rbac/models/OrganizationAppointment.mjs","../../plugins/organization-rbac/models/OrganizationMember.mjs","../../plugins/organization-rbac/index.mjs"],"sourcesContent":["import { createField, createModel, now, uuid } from '@yongdall/model';\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 }),\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\n\tpermissions: [\n\t\t{ permission: 'system:organization', fields: '*', authorizations: ['query', 'read', 'create', 'update', 'destroy', 'add', 'remove'] },\n\t],\n});\n","import { createField, createModel, now, uuid, Where} from '@yongdall/model';\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 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\tno: createField('i32', { nullable: false, default: 0 }),\n});\n\n\nexport const OrganizationMember = createModel('organizationMember', {\n\tid: createField('uuid', { nullable: false, index: true, primary: 1, default: uuid }),\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\troles: createField(OrganizationUserRole, {\n\t\tarray: true,\n\t\tconstraints: {\n\t\t\torganizationId: { field: 'organizationId' },\n\t\t\tuserId: { field: 'userId' },\n\t\t\tno: { noField: true }\n\t\t},\n\t\tlabel: '角色列表'\n\t}),\n}, {\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.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.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 { createComputed } from '@yongdall/context';\nimport { Query } from '@yongdall/model';\nimport { getUser } from '@yongdall/core';\nimport { connect } from '@yongdall/connection';\nimport { RolePermission } from '@yongdall/role';\nimport { OrganizationMember, OrganizationUserRole } from './models/index.mjs';\n\nexport * from './models/index.mjs';\n\n\n/**\n * 所在组织\n * @returns \n */\nexport const useOrganizations = createComputed(async () => {\n\tconst id = await getUser();\n\t/** @type {{organizationId: string}[]} */\n\tconst relations = await connect('rdb').select(\n\t\tnew Query(OrganizationMember).select(['organizationId']).where('userId', id)\n\t)\n\treturn new Set(relations.map(v => v.organizationId));\n});\n\n\n/**\n * 角色\n * @returns {Promise<Record<string, Set<string>>>}\n */\nexport const useOrganizationRoleIds = createComputed(async () => {\n\tconst organizations = await useOrganizations()\n\tif (!organizations.size) { return {}; }\n\tconst id = await getUser();\n\t/** @type {{organizationId: number; roleId: string;}[]} */\n\tconst list = await connect('rdb').select(\n\t\tnew Query(OrganizationUserRole).select(['organizationId', 'roleId'])\n\t\t\t.where('organizationId', 'in', [...organizations])\n\t\t\t.where('userId', id)\n\t);\n\treturn Object.fromEntries((Object.entries(Object.groupBy(list, v => v.organizationId))\n\t\t.map(([organizationId, list]) => [organizationId, new Set(list?.map(v => v.roleId))])))\n});\n\n\n/**\n * @returns {Promise<Record<string, Set<string>>>}\n */\nexport const useOrganizationPermissions = createComputed(async () => {\n\tconst roleIds = await useOrganizationRoleIds()\n\tconst allRoleIds = [...new Set(Object.values(roleIds).flatMap(v =>[...v]))];\n\tif (!allRoleIds.length) { return Object.create(null); }\n\t/** @type {{permission: string; roleId: string}[]} */\n\tconst values = await connect('rdb').select(\n\t\tnew Query(RolePermission).select(['permission', 'roleId'])\n\t\t\t.where('roleId', 'in', allRoleIds)\n\t);\n\tconst list = Object.fromEntries(Object.entries(Object.groupBy(values, l => l.roleId)).map(([k,v]) => [k, v?.map(v => v.permission)]));\n\t/** @type {Record<string, Set<string>>} */\n\tconst permissions = Object.create(null);\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});\n\n\n\n/**\n * @returns {Promise<Set<string>>}\n */\nexport const useOrganizationAllPermissions = createComputed(async () => {\n\tconst v = await useOrganizationPermissions()\n\treturn new Set(Object.values(v).flatMap(v => [...v]));\n});\n"],"mappings":";;;;;;;AAUA,MAAa,0BAA0B,YAAY,2BAA2B;CAC7E,IAAI,YAAY,QAAQ;EAAE,UAAU;EAAO,SAAS;EAAG,SAAS;EAAM,aAAa;EAAM,CAAC;CAE1F,OAAO,YAAY,UAAU;EAAE,UAAU;EAAO,OAAO;EAAQ,CAAC;CAChE,aAAa,YAAY,UAAU;EAAE,UAAU;EAAM,OAAO;EAAM,CAAC;CAEnE,WAAW,YAAY,QAAQ;EAAE,UAAU;EAAO,SAAS;EAAK,UAAU;EAAK,OAAO;EAAQ,CAAC;CAC/F,WAAW,YAAY,QAAQ;EAAE,UAAU;EAAO,SAAS;EAAK,UAAU;EAAK,OAAO;EAAU,CAAC;CAOjG,EAAE,EAEF,aAAa,CACZ;CAAE,YAAY;CAAuB,QAAQ;CAAK,gBAAgB;EAAC;EAAS;EAAQ;EAAU;EAAU;EAAW;EAAO;EAAS;CAAE,CACrI,EACD,CAAC;;;;;;;;;;;;ACnBF,MAAa,uBAAuB,YAAY,wBAAwB;CACvE,QAAQ,YAAY,QAAQ;EAAE,UAAU;EAAO,OAAO;EAAM,OAAO;EAAM,OAAO;EAAQ,UAAU;EAAY,WAAW;EAAM,SAAS;EAAG,CAAC;CAC5I,gBAAgB,YAAY,QAAQ;EAAE,UAAU;EAAO,OAAO;EAAM,OAAO;EAAM,OAAO;EAAgB,UAAU;EAAY,WAAW;EAAM,SAAS;EAAG,CAAC;CAC5J,QAAQ,YAAY,QAAQ;EAAE,UAAU;EAAO,OAAO;EAAM,OAAO;EAAM,OAAO;EAAQ,UAAU;EAAY,WAAW;EAAM,SAAS;EAAG,CAAC;CAE5I,IAAI,YAAY,OAAO;EAAE,UAAU;EAAO,SAAS;EAAG,CAAC;CACvD,CAAC;AAGF,MAAa,qBAAqB,YAAY,sBAAsB;CACnE,IAAI,YAAY,QAAQ;EAAE,UAAU;EAAO,OAAO;EAAM,SAAS;EAAG,SAAS;EAAM,CAAC;CAEpF,QAAQ,YAAY,QAAQ;EAAE,UAAU;EAAO,OAAO;EAAM,OAAO;EAAM,OAAO;EAAQ,UAAU;EAAY,WAAW;EAAM,QAAQ,EAAE,SAAS,GAAG;EAAE,CAAC;CACxJ,gBAAgB,YAAY,QAAQ;EAAE,UAAU;EAAO,OAAO;EAAM,OAAO;EAAM,OAAO;EAAgB,UAAU;EAAY,WAAW;EAAM,QAAQ,EAAE,SAAS,GAAG;EAAE,CAAC;CACxK,eAAe,YAAY,QAAQ;EAAE,UAAU;EAAM,OAAO;EAAM,OAAO;EAAM,OAAO;EAAe,UAAU;EAAY,QAAQ,EAAE,SAAS,GAAG;EAAE,CAAC;CAEpJ,SAAS,YAAY,QAAQ;EAAE,UAAU;EAAO,SAAS;EAAO,OAAO;EAAQ,CAAC;CAEhF,WAAW,YAAY,QAAQ;EAAE,UAAU;EAAO,SAAS;EAAK,UAAU;EAAK,OAAO;EAAQ,CAAC;CAC/F,WAAW,YAAY,QAAQ;EAAE,UAAU;EAAO,SAAS;EAAK,UAAU;EAAK,OAAO;EAAU,CAAC;CAEjG,OAAO,YAAY,sBAAsB;EACxC,OAAO;EACP,aAAa;GACZ,gBAAgB,EAAE,OAAO,kBAAkB;GAC3C,QAAQ,EAAE,OAAO,UAAU;GAC3B,IAAI,EAAE,SAAS,MAAM;GACrB;EACD,OAAO;EACP,CAAC;CACF,EAAE;CACF,SAAS,CACR;EAAE,QAAQ;GAAC;GAAU;GAAkB;GAAgB;EAAE,QAAQ;EAAM,CACvE;CACD,aAAa,CACZ;EAAE,YAAY;EAAe,QAAQ;EAAK,gBAAgB;GAAC;GAAS;GAAQ;GAAU;GAAU;GAAW;GAAO;GAAS;EAAE,CAC7H;CACD,OAAO;EACN,MAAM,YAAY,MAAM,OAAO,QAAQ;AACtC,OAAI,CAAC,OAAO,QAAW;AACvB,SAAM,KAAK,OACV,OACA,EAAE,SAAS,OAAO,EAClB,MAAM,IAAI,kBAAkB,KAAK,OAAO,gBAAgB,KAAK,CAC3D,IAAI,UAAU,OAAO,OAAO,CAC9B;;EAGF,MAAM,YAAY,MAAM,OAAO,QAAQ,WAAW;AACjD,OAAI,CAAC,OAAO,QAAW;AACvB,OAAI,UAAU,QAAW;AACzB,SAAM,KAAK,OACV,OACA,EAAE,SAAS,OAAO,EAClB,MAAM,IAAI,kBAAkB,KAAK,OAAO,gBAAgB,KAAK,CAC3D,IAAI,UAAU,OAAO,OAAO,CAC9B;;EAEF;CACD,CAAC;;;;;;;;ACvDF,MAAa,mBAAmB,eAAe,YAAY;CAC1D,MAAM,KAAK,MAAM,SAAS;;CAE1B,MAAM,YAAY,MAAM,QAAQ,MAAM,CAAC,OACtC,IAAI,MAAM,mBAAmB,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,MAAM,UAAU,GAAG,CAC5E;AACD,QAAO,IAAI,IAAI,UAAU,KAAI,MAAK,EAAE,eAAe,CAAC;EACnD;;;;;AAOF,MAAa,yBAAyB,eAAe,YAAY;CAChE,MAAM,gBAAgB,MAAM,kBAAkB;AAC9C,KAAI,CAAC,cAAc,KAAQ,QAAO,EAAE;CACpC,MAAM,KAAK,MAAM,SAAS;;CAE1B,MAAM,OAAO,MAAM,QAAQ,MAAM,CAAC,OACjC,IAAI,MAAM,qBAAqB,CAAC,OAAO,CAAC,kBAAkB,SAAS,CAAC,CAClE,MAAM,kBAAkB,MAAM,CAAC,GAAG,cAAc,CAAC,CACjD,MAAM,UAAU,GAAG,CACrB;AACD,QAAO,OAAO,YAAa,OAAO,QAAQ,OAAO,QAAQ,OAAM,MAAK,EAAE,eAAe,CAAC,CACpF,KAAK,CAAC,gBAAgB,UAAU,CAAC,gBAAgB,IAAI,IAAI,MAAM,KAAI,MAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAE;EACvF;;;;AAMF,MAAa,6BAA6B,eAAe,YAAY;CACpE,MAAM,UAAU,MAAM,wBAAwB;CAC9C,MAAM,aAAa,CAAC,GAAG,IAAI,IAAI,OAAO,OAAO,QAAQ,CAAC,SAAQ,MAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAC3E,KAAI,CAAC,WAAW,OAAU,QAAO,OAAO,OAAO,KAAK;;CAEpD,MAAM,SAAS,MAAM,QAAQ,MAAM,CAAC,OACnC,IAAI,MAAM,eAAe,CAAC,OAAO,CAAC,cAAc,SAAS,CAAC,CACxD,MAAM,UAAU,MAAM,WAAW,CACnC;CACD,MAAM,OAAO,OAAO,YAAY,OAAO,QAAQ,OAAO,QAAQ,SAAQ,MAAK,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAE,OAAO,CAAC,GAAG,GAAG,KAAI,MAAK,EAAE,WAAW,CAAC,CAAC,CAAC;;CAErI,MAAM,cAAc,OAAO,OAAO,KAAK;AACvC,MAAK,MAAM,CAAC,cAAc,YAAY,OAAO,QAAQ,QAAQ,EAAE;EAC9D,MAAM,IAAI,IAAI,IAAI,CAAC,GAAG,QAAQ,CAAC,SAAQ,MAAK,KAAK,MAAM,EAAE,CAAC,CAAC;AAC3D,MAAI,CAAC,EAAE,KAAQ;AACf,cAAY,gBAAgB;;AAE7B,QAAO;EACN;;;;AAOF,MAAa,gCAAgC,eAAe,YAAY;CACvE,MAAM,IAAI,MAAM,4BAA4B;AAC5C,QAAO,IAAI,IAAI,OAAO,OAAO,EAAE,CAAC,SAAQ,MAAK,CAAC,GAAG,EAAE,CAAC,CAAC;EACpD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yongdall/organization-rbac",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./index.mjs",
|
|
6
6
|
"exports": {
|
|
@@ -11,13 +11,14 @@
|
|
|
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/role": "^0.
|
|
14
|
+
"@yongdall/connection": "^0.5.0",
|
|
15
|
+
"@yongdall/context": "^0.5.0",
|
|
16
|
+
"@yongdall/core": "^0.5.0",
|
|
17
|
+
"@yongdall/model": "^0.5.0",
|
|
18
|
+
"@yongdall/role": "^0.5.0"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
|
-
"@yongdall/
|
|
21
|
+
"@yongdall/migrate": "^0.5.0",
|
|
22
|
+
"@yongdall/types": "^0.5.0"
|
|
22
23
|
}
|
|
23
24
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { a as OrganizationMember, s as OrganizationAppointment } from "../organization-rbac-B8x_aDQj.mjs";
|
|
2
|
+
import { Role } from "@yongdall/role";
|
|
3
|
+
|
|
4
|
+
//#region plugins/organization-rbac/yongdall/migration.mjs
|
|
5
|
+
/** @import { Profile } from '@yongdall/migrate' */
|
|
6
|
+
/** @type {Profile['models']} */
|
|
7
|
+
const models = [
|
|
8
|
+
OrganizationAppointment,
|
|
9
|
+
OrganizationMember,
|
|
10
|
+
Role
|
|
11
|
+
];
|
|
12
|
+
|
|
13
|
+
//#endregion
|
|
14
|
+
export { models };
|
|
15
|
+
//# sourceMappingURL=migration.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration.mjs","names":[],"sources":["../../../plugins/organization-rbac/yongdall/migration.mjs"],"sourcesContent":["/** @import { Profile } from '@yongdall/migrate' */\nimport { Role } from '@yongdall/role';\nimport { OrganizationAppointment, OrganizationMember } from '../index.mjs';\n\n\n/** @type {Profile['models']} */\nexport const models = [\n\tOrganizationAppointment,\n\tOrganizationMember,\n\tRole,\n];\n"],"mappings":";;;;;;AAMA,MAAa,SAAS;CACrB;CACA;CACA;CACA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { a as OrganizationMember, s as OrganizationAppointment } from "../organization-rbac-B8x_aDQj.mjs";
|
|
2
|
+
import { Role } from "@yongdall/role";
|
|
3
|
+
|
|
4
|
+
//#region plugins/organization-rbac/yongdall/model.mjs
|
|
5
|
+
/** @import { ModelProfile } from '@yongdall/core' */
|
|
6
|
+
/** @type {ModelProfile['models']} */
|
|
7
|
+
const models = {
|
|
8
|
+
organizationAppointment: OrganizationAppointment,
|
|
9
|
+
organizationMember: OrganizationMember,
|
|
10
|
+
role: Role
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
//#endregion
|
|
14
|
+
export { models };
|
|
15
|
+
//# sourceMappingURL=model.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.mjs","names":[],"sources":["../../../plugins/organization-rbac/yongdall/model.mjs"],"sourcesContent":["/** @import { ModelProfile } from '@yongdall/core' */\nimport { Role } from '@yongdall/role';\nimport { OrganizationAppointment, OrganizationMember } from '../index.mjs';\n\n/** @type {ModelProfile['models']} */\nexport const models = {\n\torganizationAppointment: OrganizationAppointment,\n\torganizationMember: OrganizationMember,\n\trole: Role,\n};\n"],"mappings":";;;;;;AAKA,MAAa,SAAS;CACrB,yBAAyB;CACzB,oBAAoB;CACpB,MAAM;CACN"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { n as useOrganizationPermissions, t as useOrganizationAllPermissions } from "../organization-rbac-B8x_aDQj.mjs";
|
|
2
|
+
|
|
3
|
+
//#region plugins/organization-rbac/yongdall/user.mjs
|
|
4
|
+
/** @import { UserManager } from '@yongdall/core' */
|
|
5
|
+
/** @type {UserManager['getOrganizationAllPermissions']} */
|
|
6
|
+
const getOrganizationAllPermissions = () => {
|
|
7
|
+
return useOrganizationAllPermissions();
|
|
8
|
+
};
|
|
9
|
+
/** @type {UserManager['getOrganizationAllPermissions']} */
|
|
10
|
+
const getOrganizationPermissions = () => {
|
|
11
|
+
return useOrganizationPermissions();
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
//#endregion
|
|
15
|
+
export { getOrganizationAllPermissions, getOrganizationPermissions };
|
|
16
|
+
//# sourceMappingURL=user.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.mjs","names":[],"sources":["../../../plugins/organization-rbac/yongdall/user.mjs"],"sourcesContent":["/** @import { UserManager } from '@yongdall/core' */\nimport { useOrganizationAllPermissions, useOrganizationPermissions } from '../index.mjs';\n\n\n/** @type {UserManager['getOrganizationAllPermissions']} */\nexport const getOrganizationAllPermissions = () => {\n\treturn useOrganizationAllPermissions();\n};\n/** @type {UserManager['getOrganizationAllPermissions']} */\nexport const getOrganizationPermissions = () => {\n\treturn useOrganizationPermissions();\n};\n"],"mappings":";;;;;AAKA,MAAa,sCAAsC;AAClD,QAAO,+BAA+B;;;AAGvC,MAAa,mCAAmC;AAC/C,QAAO,4BAA4B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
label: 组织权限
|
package/hooks.yongdall.mjs
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { a as OrganizationMember, n as useOrganizationPermissions, s as OrganizationAppointment, t as useOrganizationAllPermissions } from "./organization-rbac-BmLEDpJH.mjs";
|
|
2
|
-
import { Role } from "@yongdall/role";
|
|
3
|
-
|
|
4
|
-
//#region plugins/organization-rbac/hooks.yongdall.mjs
|
|
5
|
-
/** @import { Hooks, UserManager } from '@yongdall/core' */
|
|
6
|
-
/** @type {Hooks.Define['models']} */
|
|
7
|
-
const models = {
|
|
8
|
-
organizationAppointment: OrganizationAppointment,
|
|
9
|
-
organizationMember: OrganizationMember,
|
|
10
|
-
role: Role
|
|
11
|
-
};
|
|
12
|
-
/** @type {Hooks.Define['migrationModels']} */
|
|
13
|
-
const migrationModels = [
|
|
14
|
-
OrganizationAppointment,
|
|
15
|
-
OrganizationMember,
|
|
16
|
-
Role
|
|
17
|
-
];
|
|
18
|
-
/** @type {Partial<UserManager>} */
|
|
19
|
-
const userManager = {
|
|
20
|
-
getOrganizationAllPermissions() {
|
|
21
|
-
return useOrganizationAllPermissions();
|
|
22
|
-
},
|
|
23
|
-
getOrganizationPermissions() {
|
|
24
|
-
return useOrganizationPermissions();
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
//#endregion
|
|
29
|
-
export { migrationModels, models, userManager };
|
|
30
|
-
//# sourceMappingURL=hooks.yongdall.mjs.map
|
package/hooks.yongdall.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.yongdall.mjs","names":[],"sources":["../../plugins/organization-rbac/hooks.yongdall.mjs"],"sourcesContent":["/** @import { Hooks, UserManager } from '@yongdall/core' */\nimport { Role } from '@yongdall/role';\nimport { OrganizationAppointment, OrganizationMember, useOrganizationAllPermissions, useOrganizationPermissions } from './index.mjs';\n\n/** @type {Hooks.Define['models']} */\nexport const models = {\n\torganizationAppointment: OrganizationAppointment,\n\torganizationMember: OrganizationMember,\n\trole: Role,\n};\n\n/** @type {Hooks.Define['migrationModels']} */\nexport const migrationModels = [\n\tOrganizationAppointment,\n\tOrganizationMember,\n\tRole,\n];\n\n\n/** @type {Partial<UserManager>} */\nexport const userManager = {\n\tgetOrganizationAllPermissions() {\n\t\treturn useOrganizationAllPermissions()\n\t},\n\tgetOrganizationPermissions() {\n\t\treturn useOrganizationPermissions()\n\t},\n}\n"],"mappings":";;;;;;AAKA,MAAa,SAAS;CACrB,yBAAyB;CACzB,oBAAoB;CACpB,MAAM;CACN;;AAGD,MAAa,kBAAkB;CAC9B;CACA;CACA;CACA;;AAID,MAAa,cAAc;CAC1B,gCAAgC;AAC/B,SAAO,+BAA+B;;CAEvC,6BAA6B;AAC5B,SAAO,4BAA4B;;CAEpC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"organization-rbac-BmLEDpJH.mjs","names":[],"sources":["../../plugins/organization-rbac/models/OrganizationAppointment.mjs","../../plugins/organization-rbac/models/OrganizationMember.mjs","../../plugins/organization-rbac/index.mjs"],"sourcesContent":["import { createField, createModel, now, uuid } from '@yongdall/model';\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 }),\n\t\n\tlabel: createField('string', { nullable: false, label: '职务名称' }),\n\tdescription: createField('string', { nullable: true, label: '描述' }),\n\t\n\tcreatedAt: createField('date', { nullable: false, default: now, creating: now, label: '创建日期' }),\n\tupdatedAt: createField('date', { nullable: false, default: now, updating: now, label: '最后更新日期' }),\n\t\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","import { createField, createModel, now, uuid, Where} from '@yongdall/model';\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 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\tno: createField('i32', { nullable: false, default: 0 }),\n});\n\n\nexport const OrganizationMember = createModel('organizationMember', {\n\tid: createField('uuid', { nullable: false, index: true, primary: 1, default: uuid }),\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\troles: createField(OrganizationUserRole, {\n\t\tarray: true,\n\t\tconstraints: {\n\t\t\torganizationId: { field: 'organizationId' },\n\t\t\tuserId: { field: 'userId' },\n\t\t\tno: { noField: true }\n\t\t},\n\t\tlabel: '角色列表'\n\t}),\n}, {\n\tindexes: [\n\t\t{ fields: ['userId', 'organizationId', 'appointmentId'], unique: true }\n\t],\n\thooks: {\n\t\tasync afterCreate(conn, Model, record) {\n\t\t\tif (!record.default) { return }\n\t\t\tawait conn.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.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 { createComputed } from '@yongdall/context';\nimport { Query } from '@yongdall/model';\nimport { getUser } from '@yongdall/core';\nimport { connect } from '@yongdall/connection';\nimport { RolePermission } from '@yongdall/role';\nimport { OrganizationMember, OrganizationUserRole } from './models/index.mjs';\n\nexport * from './models/index.mjs';\n\n\n/**\n * 所在组织\n * @returns \n */\nexport const useOrganizations = createComputed(async () => {\n\tconst id = await getUser();\n\t/** @type {{organizationId: string}[]} */\n\tconst relations = await connect('rdb').select(\n\t\tnew Query(OrganizationMember).select(['organizationId']).where('userId', id)\n\t)\n\treturn new Set(relations.map(v => v.organizationId));\n});\n\n\n/**\n * 角色\n * @returns {Promise<Record<string, Set<string>>>}\n */\nexport const useOrganizationRoleIds = createComputed(async () => {\n\tconst organizations = await useOrganizations()\n\tif (!organizations.size) { return {}; }\n\tconst id = await getUser();\n\t/** @type {{organizationId: number; roleId: string;}[]} */\n\tconst list = await connect('rdb').select(\n\t\tnew Query(OrganizationUserRole).select(['organizationId', 'roleId'])\n\t\t\t.where('organizationId', 'in', [...organizations])\n\t\t\t.where('userId', id)\n\t);\n\treturn Object.fromEntries((Object.entries(Object.groupBy(list, v => v.organizationId))\n\t\t.map(([organizationId, list]) => [organizationId, new Set(list?.map(v => v.roleId))])))\n});\n\n\n/**\n * @returns {Promise<Record<string, Set<string>>>}\n */\nexport const useOrganizationPermissions = createComputed(async () => {\n\tconst roleIds = await useOrganizationRoleIds()\n\tconst allRoleIds = [...new Set(Object.values(roleIds).flatMap(v =>[...v]))];\n\tif (!allRoleIds.length) { return Object.create(null); }\n\t/** @type {{permission: string; roleId: string}[]} */\n\tconst values = await connect('rdb').select(\n\t\tnew Query(RolePermission).select(['permission', 'roleId'])\n\t\t\t.where('roleId', 'in', allRoleIds)\n\t);\n\tconst list = Object.fromEntries(Object.entries(Object.groupBy(values, l => l.roleId)).map(([k,v]) => [k, v?.map(v => v.permission)]));\n\t/** @type {Record<string, Set<string>>} */\n\tconst permissions = Object.create(null);\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});\n\n\n\n/**\n * @returns {Promise<Set<string>>}\n */\nexport const useOrganizationAllPermissions = createComputed(async () => {\n\tconst v = await useOrganizationPermissions()\n\treturn new Set(Object.values(v).flatMap(v => [...v]));\n});\n"],"mappings":"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"}
|