@steedos/standard-permission 2.3.0-beta.35 → 2.3.0-beta.36

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.
@@ -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,4 @@
1
+ name: customize
2
+ is_enable: true
3
+ label: 自定义
4
+ 'on': record_only
@@ -0,0 +1,7 @@
1
+ name: is_system
2
+ type: boolean
3
+ label: 系统
4
+ visible_on: "{{global.mode ==='read' ? true : false}}"
5
+ readonly: true
6
+ disabled: true
7
+ sort_no: 999
@@ -0,0 +1,13 @@
1
+ name: permission
2
+ label: 权限
3
+ type: select
4
+ options:
5
+ - label: 默认打开
6
+ value: 'on'
7
+ - label: 默认关闭
8
+ value: 'off'
9
+ - label: 隐藏选项卡
10
+ value: 'hidden'
11
+ defaultValue: 'on'
12
+ required: true
13
+ index: true
@@ -0,0 +1,7 @@
1
+ name: permission_set
2
+ label: 所属权限集
3
+ type: master_detail
4
+ reference_to: permission_set
5
+ reference_to_field: name
6
+ required: true
7
+ index: true
@@ -0,0 +1,7 @@
1
+ name: tab
2
+ label: 选项卡
3
+ type: lookup
4
+ reference_to: tabs
5
+ reference_to_field: name
6
+ required: true
7
+ index: true
@@ -0,0 +1,14 @@
1
+ name: all
2
+ columns:
3
+ - field: permission_set
4
+ - field: tab
5
+ - field: permission
6
+ - field: is_system
7
+ filter_scope: space
8
+ filters: []
9
+ label: 所有
10
+ mobile_columns: []
11
+ scrolling_mode: standard
12
+ shared: true
13
+ sort_no: 100
14
+ type: grid
@@ -0,0 +1,5 @@
1
+ name: permission_tabs
2
+ label: 选项卡权限
3
+ icon: apps
4
+ version: 2
5
+ hidden: true
@@ -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.35",
3
+ "version": "2.3.0-beta.36",
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": "a5fb79aafcd152165f41d981c8d1ce97d7f4c205"
15
+ "gitHead": "1fef67d04c0796a7453dbea7f8101514f155235f"
16
16
  }