@steedos/standard-permission 2.5.3-beta.18 → 2.5.3-beta.19

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.
@@ -2,7 +2,7 @@
2
2
  * @Author: sunhaolin@hotoa.com
3
3
  * @Date: 2022-05-26 16:56:54
4
4
  * @LastEditors: sunhaolin@hotoa.com
5
- * @LastEditTime: 2023-06-13 17:32:29
5
+ * @LastEditTime: 2023-06-14 10:49:23
6
6
  * @Description: 复制已有简档来创建新简档
7
7
  * 使用mongodb的事务处理,保证数据的一致性
8
8
  * 复制对象包括:简档、对象权限、字段权限、选项卡权限
@@ -121,7 +121,9 @@ router.post('/api/permission/permission_set/copy', core.requireAuthentication, a
121
121
  if (newPermissionSet) {
122
122
  const { _id: newPermissionSetId, name: newPermissionSetName } = newPermissionSet;
123
123
  // 对象权限数据来源于两个部分,1、内存 2、数据库
124
- const originalPermissionObjects = await poObj.find({ filters: [['space', '=', spaceId], ['permission_set_id', '=', originalPermissionSetId]] }, userSession);
124
+ const internalPermissionObjects = await getInternalPermissionObjects(originalPermissionSetId);
125
+ const dbPermissionObjects = await poObj.directFind({ filters: [['space', '=', spaceId], ['permission_set_id', '=', originalPermissionSetId]] });
126
+ const originalPermissionObjects = getCombinedPermissionObjects(internalPermissionObjects, dbPermissionObjects);
125
127
  const newPermissionObjects = []
126
128
  const newPermissionFields = []
127
129
  // 遍历原有的对象权限
@@ -226,7 +228,7 @@ async function getInternalPermissionObjects(permissionSetId) {
226
228
  filters: [
227
229
  ['_id', '=', permissionSetId],
228
230
  ]
229
- })[0]);
231
+ }))[0];
230
232
  // 如果库中有记录则使用库中的name作为判断条件,否则使用permissionSetId
231
233
  const permissionSetName = permissionSetDoc ? permissionSetDoc.name : permissionSetId;
232
234
 
@@ -250,6 +252,24 @@ async function getInternalPermissionObjects(permissionSetId) {
250
252
  }
251
253
  return objectsPermissions;
252
254
  }
255
+ // 合并内存中的对象权限和数据库中的对象权限
256
+ // 如果dbPermissionObjects和internalPermissionObjects中permission_set_id存在相同的值,则以dbPermissionObjects中数据为准
257
+ function getCombinedPermissionObjects(internalPermissionObjects, dbPermissionObjects) {
258
+ const dbPermissionObjectsIds = _.pluck(dbPermissionObjects, 'permission_set_id');
259
+ const internalPermissionObjectsIds = _.pluck(internalPermissionObjects, 'permission_set_id');
260
+ const sameIds = _.intersection(dbPermissionObjectsIds, internalPermissionObjectsIds);
261
+ if (sameIds.length > 0) {
262
+ for (const sameId of sameIds) {
263
+ const dbPermissionObject = _.findWhere(dbPermissionObjects, { permission_set_id: sameId });
264
+ const internalPermissionObject = _.findWhere(internalPermissionObjects, { permission_set_id: sameId });
265
+ if (dbPermissionObject && internalPermissionObject) {
266
+ const index = internalPermissionObjects.indexOf(internalPermissionObject);
267
+ internalPermissionObjects.splice(index, 1, dbPermissionObject);
268
+ }
269
+ }
270
+ }
271
+ return [...internalPermissionObjects, ...dbPermissionObjects];
272
+ }
253
273
 
254
274
  async function getFieldPermission(apiName) {
255
275
  const schema = objectql.getSteedosSchema();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steedos/standard-permission",
3
- "version": "2.5.3-beta.18",
3
+ "version": "2.5.3-beta.19",
4
4
  "main": "package.service.js",
5
5
  "private": false,
6
6
  "publishConfig": {
@@ -12,5 +12,5 @@
12
12
  "description": "steedos package",
13
13
  "repository": {},
14
14
  "license": "MIT",
15
- "gitHead": "efa1f5bc5a03e09374141b10f65eaf269283e4d7"
15
+ "gitHead": "43f6afa6a823ae9f34be22b981a6fa38fd5590e2"
16
16
  }