@steedos/standard-permission 2.3.0-beta.35 → 2.3.0-beta.37
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/main/default/objectTranslations/permission_tabs.en/permission_tabs.en.objectTranslation.yml +30 -0
- package/main/default/objectTranslations/permission_tabs.zh-CN/permission_tabs.zh-CN.objectTranslation.yml +30 -0
- package/main/default/objects/permission_tabs/buttons/customize.button.js +30 -0
- package/main/default/objects/permission_tabs/buttons/customize.button.yml +4 -0
- package/main/default/objects/permission_tabs/fields/is_system.field.yml +7 -0
- package/main/default/objects/permission_tabs/fields/permission.field.yml +13 -0
- package/main/default/objects/permission_tabs/fields/permission_set.field.yml +7 -0
- package/main/default/objects/permission_tabs/fields/tab.field.yml +7 -0
- package/main/default/objects/permission_tabs/listviews/all.listview.yml +14 -0
- package/main/default/objects/permission_tabs/permission_tabs.object.yml +5 -0
- package/main/default/objects/permission_tabs/permissions/admin.permission.yml +14 -0
- package/main/default/objects/permission_tabs/permissions/user.permission.yml +14 -0
- package/main/default/triggers/permission_tabs_metadata.trigger.js +147 -0
- package/package.json +2 -2
package/main/default/objectTranslations/permission_tabs.en/permission_tabs.en.objectTranslation.yml
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
name: permission_tabs
|
|
2
|
+
label: Permission Tabs
|
|
3
|
+
description:
|
|
4
|
+
fields:
|
|
5
|
+
permission_set_id:
|
|
6
|
+
label: Permission Set
|
|
7
|
+
help:
|
|
8
|
+
description:
|
|
9
|
+
tab:
|
|
10
|
+
label: Tab
|
|
11
|
+
help:
|
|
12
|
+
description:
|
|
13
|
+
permission:
|
|
14
|
+
label: Permission
|
|
15
|
+
help:
|
|
16
|
+
description:
|
|
17
|
+
options:
|
|
18
|
+
- label: 'On'
|
|
19
|
+
value: 'on'
|
|
20
|
+
- label: 'Off'
|
|
21
|
+
value: 'off'
|
|
22
|
+
- label: 'Hidden'
|
|
23
|
+
value: 'hidden'
|
|
24
|
+
is_system:
|
|
25
|
+
label: System
|
|
26
|
+
help:
|
|
27
|
+
description:
|
|
28
|
+
listviews:
|
|
29
|
+
all:
|
|
30
|
+
label: All
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
name: permission_tabs
|
|
2
|
+
label: 选项卡权限
|
|
3
|
+
description:
|
|
4
|
+
fields:
|
|
5
|
+
permission_set_id:
|
|
6
|
+
label: 权限集
|
|
7
|
+
help:
|
|
8
|
+
description:
|
|
9
|
+
tab:
|
|
10
|
+
label: 选项卡
|
|
11
|
+
help:
|
|
12
|
+
description:
|
|
13
|
+
permission:
|
|
14
|
+
label: 权限
|
|
15
|
+
help:
|
|
16
|
+
description:
|
|
17
|
+
options:
|
|
18
|
+
- label: 默认打开
|
|
19
|
+
value: 'on'
|
|
20
|
+
- label: 默认关闭
|
|
21
|
+
value: 'off'
|
|
22
|
+
- label: 隐藏选项卡
|
|
23
|
+
value: 'hidden'
|
|
24
|
+
is_system:
|
|
25
|
+
label: 系统
|
|
26
|
+
help:
|
|
27
|
+
description:
|
|
28
|
+
listviews:
|
|
29
|
+
all:
|
|
30
|
+
label: 全部
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @Author: sunhaolin@hotoa.com
|
|
3
|
+
* @Date: 2022-10-27 14:30:02
|
|
4
|
+
* @LastEditors: sunhaolin@hotoa.com
|
|
5
|
+
* @LastEditTime: 2022-10-27 14:46:17
|
|
6
|
+
* @Description:
|
|
7
|
+
*/
|
|
8
|
+
module.exports = {
|
|
9
|
+
customize: function (object_name, record_id, fields) {
|
|
10
|
+
var doc = Creator.odata.get(object_name, record_id);
|
|
11
|
+
var newDoc = {}
|
|
12
|
+
_.each(Creator.getObject(object_name).fields, function (v, k) {
|
|
13
|
+
if (_.has(doc, k)) {
|
|
14
|
+
newDoc[k] = doc[k]
|
|
15
|
+
}
|
|
16
|
+
})
|
|
17
|
+
delete newDoc.is_system;
|
|
18
|
+
|
|
19
|
+
Creator.odata.insert(object_name, Object.assign(newDoc), function (result, error) {
|
|
20
|
+
if (result) {
|
|
21
|
+
SteedosUI.reloadRecord(object_name, result._id);
|
|
22
|
+
FlowRouter.reload();
|
|
23
|
+
FlowRouter.go(`/app/-/${object_name}/view/${result._id}`)
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
},
|
|
27
|
+
customizeVisible: function (object_name, record_id, record_permissions, record) {
|
|
28
|
+
return record && Creator.baseObject.actions.standard_new.visible() && record.is_system;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
name: 选项卡权限.管理员
|
|
2
|
+
allowCreate: true
|
|
3
|
+
allowCreateFiles: true
|
|
4
|
+
allowDelete: true
|
|
5
|
+
allowDeleteFiles: true
|
|
6
|
+
allowEdit: true
|
|
7
|
+
allowEditFiles: true
|
|
8
|
+
allowRead: true
|
|
9
|
+
allowReadFiles: true
|
|
10
|
+
modifyAllFiles: true
|
|
11
|
+
modifyAllRecords: true
|
|
12
|
+
permission_set_id: admin
|
|
13
|
+
viewAllFiles: true
|
|
14
|
+
viewAllRecords: true
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
name: 选项卡权限.用户
|
|
2
|
+
allowCreate: false
|
|
3
|
+
allowCreateFiles: false
|
|
4
|
+
allowDelete: false
|
|
5
|
+
allowDeleteFiles: false
|
|
6
|
+
allowEdit: false
|
|
7
|
+
allowEditFiles: false
|
|
8
|
+
allowRead: true
|
|
9
|
+
allowReadFiles: true
|
|
10
|
+
modifyAllRecords: false
|
|
11
|
+
permission_set_id: user
|
|
12
|
+
viewAllFiles: true
|
|
13
|
+
viewAllRecords: true
|
|
14
|
+
viewCompanyRecords: true
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @Author: sunhaolin@hotoa.com
|
|
3
|
+
* @Date: 2022-10-26 14:14:51
|
|
4
|
+
* @LastEditors: sunhaolin@hotoa.com
|
|
5
|
+
* @LastEditTime: 2022-10-27 17:42:29
|
|
6
|
+
* @Description:
|
|
7
|
+
*/
|
|
8
|
+
const objectql = require('@steedos/objectql');
|
|
9
|
+
const auth = require('@steedos/auth');
|
|
10
|
+
const _ = require('underscore');
|
|
11
|
+
async function getAll() {
|
|
12
|
+
const schema = objectql.getSteedosSchema();
|
|
13
|
+
const configs = await objectql.registerTab.getAll(schema.broker)
|
|
14
|
+
const dataList = _.pluck(configs, 'metadata');
|
|
15
|
+
let permissionTabs = [];
|
|
16
|
+
for (const item of dataList) {
|
|
17
|
+
if (!item._id) {
|
|
18
|
+
item._id = `${item.name}`
|
|
19
|
+
}
|
|
20
|
+
if (item.permissions) {
|
|
21
|
+
for (const permissionTab of item.permissions) {
|
|
22
|
+
permissionTabs.push({
|
|
23
|
+
_id: `${permissionTab.permission_set}_${item.name}`,
|
|
24
|
+
permission: permissionTab.permission,
|
|
25
|
+
permission_set: permissionTab.permission_set,
|
|
26
|
+
tab: item.name,
|
|
27
|
+
|
|
28
|
+
is_system: true,
|
|
29
|
+
record_permissions: { // 此属性控制记录在前台页面的权限
|
|
30
|
+
allowEdit: false,
|
|
31
|
+
allowDelete: false,
|
|
32
|
+
allowRead: true,
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return permissionTabs;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* 检查同一个权限集下针对同一个选项卡是否重复配置
|
|
43
|
+
* @param {*} permission_set
|
|
44
|
+
* @param {*} tab
|
|
45
|
+
* @param {*} action beforeInsert/beforeUpdate
|
|
46
|
+
* @param {*} id
|
|
47
|
+
*/
|
|
48
|
+
async function checkMultiple(permission_set, tab, action, id) {
|
|
49
|
+
if (!permission_set || !tab) return
|
|
50
|
+
|
|
51
|
+
const pTabObj = objectql.getObject('permission_tabs')
|
|
52
|
+
const pTabDocs = await pTabObj.find({
|
|
53
|
+
filters: [
|
|
54
|
+
['permission_set', '=', permission_set],
|
|
55
|
+
['tab', '=', tab]
|
|
56
|
+
]
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
if (pTabDocs.length > 1) {
|
|
60
|
+
throw new Error(`权限集/简档 ${permission_set} 下发现选项卡 ${tab} 权限配置了${pTabDocs.length}条,请及时处理。`)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (pTabDocs.length === 1 && (action === 'beforeInsert' || (action === 'beforeUpdate' && pTabDocs[0]._id != id))) {
|
|
64
|
+
throw new Error(`已在权限集/简档 ${permission_set} 下配置过选项卡 ${tab} 的权限,无需重复配置。`)
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
module.exports = {
|
|
69
|
+
listenTo: 'permission_tabs',
|
|
70
|
+
|
|
71
|
+
beforeInsert: async function () {
|
|
72
|
+
const { doc, id } = this
|
|
73
|
+
await checkMultiple(doc.permission_set, doc.tab, 'beforeInsert', id)
|
|
74
|
+
},
|
|
75
|
+
|
|
76
|
+
beforeUpdate: async function () {
|
|
77
|
+
const { doc, getObject, object_name, id } = this
|
|
78
|
+
const pTabObj = getObject(object_name)
|
|
79
|
+
const nowDoc = await pTabObj.findOne(id)
|
|
80
|
+
const newDoc = {
|
|
81
|
+
...nowDoc,
|
|
82
|
+
...doc
|
|
83
|
+
}
|
|
84
|
+
await checkMultiple(newDoc.permission_set, newDoc.tab, 'beforeUpdate', id)
|
|
85
|
+
},
|
|
86
|
+
|
|
87
|
+
beforeFind: async function () {
|
|
88
|
+
delete this.query.fields;
|
|
89
|
+
},
|
|
90
|
+
|
|
91
|
+
beforeAggregate: async function () {
|
|
92
|
+
delete this.query.fields;
|
|
93
|
+
},
|
|
94
|
+
|
|
95
|
+
afterFind: async function () {
|
|
96
|
+
const { spaceId } = this;
|
|
97
|
+
let dataList = await getAll();
|
|
98
|
+
if (dataList) {
|
|
99
|
+
dataList.forEach((doc) => {
|
|
100
|
+
if (!_.find(this.data.values, (value) => {
|
|
101
|
+
return value.permission_set === doc.permission_set && value.tab === doc.tab
|
|
102
|
+
})) {
|
|
103
|
+
this.data.values.push(doc);
|
|
104
|
+
}
|
|
105
|
+
})
|
|
106
|
+
const records = objectql.getSteedosSchema().metadataDriver.find(this.data.values, this.query, spaceId);
|
|
107
|
+
if (records.length > 0) {
|
|
108
|
+
this.data.values = records;
|
|
109
|
+
} else {
|
|
110
|
+
this.data.values.length = 0;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
afterAggregate: async function () {
|
|
115
|
+
const { spaceId } = this;
|
|
116
|
+
let dataList = await getAll();
|
|
117
|
+
if (dataList) {
|
|
118
|
+
dataList.forEach((doc) => {
|
|
119
|
+
if (!_.find(this.data.values, (value) => {
|
|
120
|
+
return value.permission_set === doc.permission_set && value.tab === doc.tab
|
|
121
|
+
})) {
|
|
122
|
+
this.data.values.push(doc);
|
|
123
|
+
};
|
|
124
|
+
})
|
|
125
|
+
const records = objectql.getSteedosSchema().metadataDriver.find(this.data.values, this.query, spaceId);
|
|
126
|
+
if (records.length > 0) {
|
|
127
|
+
this.data.values = records;
|
|
128
|
+
} else {
|
|
129
|
+
this.data.values.length = 0;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
afterCount: async function () {
|
|
134
|
+
delete this.query.fields;
|
|
135
|
+
let result = await objectql.getObject(this.object_name).find(this.query, await auth.getSessionByUserId(this.userId, this.spaceId))
|
|
136
|
+
this.data.values = result.length;
|
|
137
|
+
},
|
|
138
|
+
afterFindOne: async function () {
|
|
139
|
+
if (_.isEmpty(this.data.values)) {
|
|
140
|
+
const all = await getAll();
|
|
141
|
+
const id = this.id;
|
|
142
|
+
this.data.values = _.find(all, function (item) {
|
|
143
|
+
return item._id === id
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@steedos/standard-permission",
|
|
3
|
-
"version": "2.3.0-beta.
|
|
3
|
+
"version": "2.3.0-beta.37",
|
|
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": "
|
|
15
|
+
"gitHead": "5e1dc58290142d1d7deb0fbe2e171d79c5029cdd"
|
|
16
16
|
}
|