@steedos/standard-permission 2.2.55-beta.16

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.
Files changed (39) hide show
  1. package/main/default/applications/.gitkeep +0 -0
  2. package/main/default/client/permission_set.client.js +38 -0
  3. package/main/default/objectTranslations/permission_objects.en/permission_objects.en.objectTranslation.yml +108 -0
  4. package/main/default/objectTranslations/permission_objects.zh-CN/permission_objects.zh-CN.objectTranslation.yml +108 -0
  5. package/main/default/objectTranslations/permission_set.en/permission_set.en.objectTranslation.yml +87 -0
  6. package/main/default/objectTranslations/permission_set.zh-CN/permission_set.zh-CN.objectTranslation.yml +87 -0
  7. package/main/default/objectTranslations/permission_shares.en/permission_shares.en.objectTranslation.yml +27 -0
  8. package/main/default/objectTranslations/permission_shares.zh-CN/permission_shares.zh-CN.objectTranslation.yml +27 -0
  9. package/main/default/objects/permission_fields.object.yml +184 -0
  10. package/main/default/objects/permission_objects.action.js +57 -0
  11. package/main/default/objects/permission_objects.function.js +23 -0
  12. package/main/default/objects/permission_objects.object.js +20 -0
  13. package/main/default/objects/permission_objects.object.yml +394 -0
  14. package/main/default/objects/permission_set/buttons/permission_set.action.js +17 -0
  15. package/main/default/objects/permission_set/permission_set.object.yml +268 -0
  16. package/main/default/objects/permission_shares.object.js +57 -0
  17. package/main/default/objects/permission_shares.object.yml +63 -0
  18. package/main/default/objects/restriction_rules.action.js +25 -0
  19. package/main/default/objects/restriction_rules.object.yml +82 -0
  20. package/main/default/objects/share_rules.action.js +25 -0
  21. package/main/default/objects/share_rules.object.yml +82 -0
  22. package/main/default/permissionsets/.gitkeep +0 -0
  23. package/main/default/profiles/.gitkeep +0 -0
  24. package/main/default/routes/copyProfile.router.js +113 -0
  25. package/main/default/server/permission_set.object.js +130 -0
  26. package/main/default/tabs/.gitkeep +0 -0
  27. package/main/default/triggers/.gitkeep +0 -0
  28. package/main/default/triggers/permission_fields.trigger.js +94 -0
  29. package/main/default/triggers/permission_objects.trigger.js +159 -0
  30. package/main/default/triggers/permission_set.trigger.js +89 -0
  31. package/main/default/triggers/restriction_rules.trigger.js +67 -0
  32. package/main/default/triggers/restriction_rules_api_name.trigger.js +30 -0
  33. package/main/default/triggers/share_rules.trigger.js +68 -0
  34. package/main/default/triggers/share_rules_api_name.trigger.js +30 -0
  35. package/package.json +16 -0
  36. package/package.service.js +75 -0
  37. package/public/.md +3 -0
  38. package/src/.md +3 -0
  39. package/webapp/.md +1 -0
@@ -0,0 +1,57 @@
1
+ const _ = require("underscore");
2
+ module.exports = {
3
+ customize: function (object_name, record_id, fields) {
4
+ var doc = Creator.odata.get(object_name, record_id);
5
+ var newDoc = {}
6
+ _.each(Creator.getObject(object_name).fields, function(v, k){
7
+ if(_.has(doc, k)){
8
+ newDoc[k] = doc[k]
9
+ }
10
+ })
11
+ delete newDoc.is_system;
12
+
13
+ let permissionSetId = doc.permission_set_id
14
+ if(_.include(['admin','user','supplier','customer'], doc.permission_set_id)){
15
+ let dbPst = Creator.odata.query('permission_set', {$select: "_id", $filter: "(name eq '"+doc.permission_set_id+"') and (space eq '"+Steedos.getSpaceId()+"')"}, true)
16
+ if(dbPst && dbPst.length > 0){
17
+ permissionSetId = dbPst[0]._id;
18
+ }
19
+
20
+ if(_.include(['admin','user','supplier','customer'], permissionSetId)){
21
+ return toastr.error("请先自定义权限集")
22
+ }
23
+ }
24
+ Creator.odata.insert(object_name, Object.assign(newDoc, {permission_set_id: permissionSetId}), function(result, error){
25
+ if (result) {
26
+ if(Session.get("object_name") === 'permission_objects'){
27
+ FlowRouter.go(`/app/-/${object_name}/view/${result._id}`)
28
+ }else{
29
+ href = Creator.getObjectUrl(object_name, result._id);
30
+ window.open(href,'_blank','width=800, height=600, left=50, top= 50, toolbar=no, status=no, menubar=no, resizable=yes, scrollbars=yes')
31
+ }
32
+ }
33
+ });
34
+ },
35
+ customizeVisible: function(object_name, record_id, record_permissions, record){
36
+ if(!record){
37
+ record = {}
38
+ }
39
+ return Creator.baseObject.actions.standard_new.visible() && record.is_system;
40
+ },
41
+ resetFieldPermissions: function (object_name, record_id) {
42
+ var doc = Creator.odata.get(object_name, record_id);
43
+ var result = Steedos.authRequest(`/api/v4/${object_name}/${record_id}/resetFieldPermissions`, { type: 'get', async: false });
44
+ if (result.error) {
45
+ toastr.error(TAPi18n.__(result.error));
46
+ } else {
47
+ toastr.success('初始化成功', '字段权限');
48
+ FlowRouter.reload();
49
+ }
50
+ },
51
+ resetFieldPermissionsVisible: function (object_name, record_id, record_permissions, record) {
52
+ if (!record) {
53
+ record = {}
54
+ }
55
+ return !(Creator.baseObject.actions.standard_new.visible() && record.is_system);
56
+ }
57
+ }
@@ -0,0 +1,23 @@
1
+ const objectql = require("@steedos/objectql");
2
+
3
+ module.exports = {
4
+ resetFieldPermissions: async function (req, res) {
5
+ try {
6
+ const { params, user: userSession } = req;
7
+ const recordId = params._id;
8
+ await objectql.getSteedosSchema().broker.call(`permission_fields.resetFieldPermissions`, {
9
+ permissionObjectId: recordId
10
+ }, {
11
+ meta: {
12
+ user: userSession
13
+ }
14
+ });
15
+ res.status(200).send({});
16
+ } catch (error) {
17
+ console.error(error);
18
+ res.status(400).send({
19
+ error: error.message
20
+ });
21
+ }
22
+ }
23
+ }
@@ -0,0 +1,20 @@
1
+ if(!Creator.Objects['permission_objects'].triggers){
2
+ Creator.Objects['permission_objects'].triggers = {}
3
+ }
4
+
5
+ Creator.Objects['permission_objects'].triggers = Object.assign({}, Creator.Objects['permission_objects'].triggers,{
6
+ "before.insert.server.process":{
7
+ on: "server",
8
+ when: "before.insert",
9
+ todo: function (userId, doc) {
10
+ return Creator.processPermissions(doc);
11
+ }
12
+ },
13
+ "before.update.server.process":{
14
+ on: "server",
15
+ when: "before.update",
16
+ todo: function (userId, doc, fieldNames, modifier, options) {
17
+ return Creator.processPermissions(modifier.$set);
18
+ }
19
+ }
20
+ })
@@ -0,0 +1,394 @@
1
+ name: permission_objects
2
+ label: Permission
3
+ icon: omni_supervisor
4
+ hidden: true
5
+ version: 2
6
+ fields:
7
+ name:
8
+ label: Name
9
+ type: text
10
+ is_wide: true
11
+ visible_on: "{{false}}"
12
+ permission_set_id:
13
+ label: Permission Set
14
+ type: master_detail
15
+ required: true
16
+ reference_to: permission_set
17
+ index: true
18
+ name: permission_set_id
19
+ filterable: true
20
+ reference_limit: 5000
21
+ reference_sort:
22
+ name: 1
23
+ object_name:
24
+ label: Object
25
+ type: lookup
26
+ reference_to: objects
27
+ write_requires_master_read: true
28
+ reference_to_field: name
29
+ index: true
30
+ required: true
31
+ create: false
32
+ optionsFunction: !<tag:yaml.org,2002:js/function> |-
33
+ function () {
34
+ var _options;
35
+
36
+ _options = [];
37
+
38
+ _.forEach(Creator.objectsByName, function (o, k) {
39
+ if (!o.hidden) {
40
+ return _options.push({
41
+ label: o.label,
42
+ value: k,
43
+ icon: o.icon
44
+ });
45
+ }
46
+ });
47
+
48
+ return _options;
49
+ }
50
+ name: object_name
51
+ filterable: true
52
+ allowRead:
53
+ type: boolean
54
+ label: Allow Read
55
+ name: allowRead
56
+ allowCreate:
57
+ label: Allow Create
58
+ type: boolean
59
+ name: allowCreate
60
+ allowEdit:
61
+ label: Allow Edit
62
+ type: boolean
63
+ name: allowEdit
64
+ allowDelete:
65
+ label: Allow Delete
66
+ type: boolean
67
+ name: allowDelete
68
+ viewAllRecords:
69
+ type: boolean
70
+ label: View All Records
71
+ name: viewAllRecords
72
+ modifyAllRecords:
73
+ type: boolean
74
+ label: Modify All Records
75
+ name: modifyAllRecords
76
+ viewCompanyRecords:
77
+ type: boolean
78
+ label: View Division's Records
79
+ name: viewCompanyRecords
80
+ modifyCompanyRecords:
81
+ type: boolean
82
+ label: Modify Division's Records
83
+ name: modifyCompanyRecords
84
+ viewAssignCompanysRecords:
85
+ type: lookup
86
+ reference_to: company
87
+ label: 查看指定分部
88
+ multiple: true
89
+ modifyAssignCompanysRecords:
90
+ type: lookup
91
+ reference_to: company
92
+ label: 修改指定分部
93
+ multiple: true
94
+ allowReadFiles:
95
+ type: boolean
96
+ label: Allow Read Files
97
+ group: Files permissions
98
+ allowCreateFiles:
99
+ label: Allow Create Files
100
+ type: boolean
101
+ group: Files permissions
102
+ allowEditFiles:
103
+ label: Allow Edit Files
104
+ type: boolean
105
+ group: Files permissions
106
+ allowDeleteFiles:
107
+ label: Allow Delete Files
108
+ type: boolean
109
+ group: Files permissions
110
+ viewAllFiles:
111
+ type: boolean
112
+ label: View All Files
113
+ group: Files permissions
114
+ modifyAllFiles:
115
+ type: boolean
116
+ label: Modify All Files
117
+ group: Files permissions
118
+ disabled_list_views:
119
+ type: lookup
120
+ label: Disabled ListViews
121
+ multiple: true
122
+ depend_on:
123
+ - object_name
124
+ defaultIcon: lead_list
125
+ optionsFunction: !<tag:yaml.org,2002:js/function> |-
126
+ function (values) {
127
+ var _object, _options, list_views;
128
+
129
+ _options = [];
130
+ var objectName = values.object_name;
131
+ if(_.isObject(values.object_name)){
132
+ objectName = objectName.name
133
+ }
134
+ _object = Creator.getObject(objectName);
135
+ list_views = _object.list_views;
136
+
137
+ _.forEach(list_views, function (f, k) {
138
+ if (k !== "default" && (!_.has(f, "shared") || f.shared)) {
139
+ return _options.push({
140
+ label: f.label || f.name || k,
141
+ value: f._id
142
+ });
143
+ }
144
+ });
145
+
146
+ return _options;
147
+ }
148
+ name: disabled_list_views
149
+ filterable: true
150
+ disabled_actions:
151
+ type: lookup
152
+ label: Disabled Actions
153
+ hidden: true
154
+ omit: true
155
+ multiple: true
156
+ depend_on:
157
+ - object_name
158
+ defaultIcon: marketing_actions
159
+ optionsFunction: !<tag:yaml.org,2002:js/function> |-
160
+ function (values) {
161
+ var _object, _options, actions;
162
+
163
+ _options = [];
164
+ var objectName = values.object_name;
165
+ if(_.isObject(values.object_name)){
166
+ objectName = objectName.name
167
+ }
168
+ _object = Creator.getObject(objectName);
169
+ actions = _object.actions;
170
+
171
+ _.forEach(actions, function (f, k) {
172
+ if (["standard_new", "standard_edit", "standard_delete"].indexOf(k) < 0) {
173
+ return _options.push({
174
+ label: f.label || k,
175
+ value: k
176
+ });
177
+ }
178
+ });
179
+
180
+ return _options;
181
+ }
182
+ name: disabled_actions
183
+ filterable: true
184
+ unreadable_fields:
185
+ type: lookup
186
+ label: Unreadable Fields
187
+ hidden: true
188
+ omit: true
189
+ multiple: true
190
+ depend_on:
191
+ - object_name
192
+ optionsFunction: !<tag:yaml.org,2002:js/function> |-
193
+ function (values) {
194
+ var _object, _options, fields, icon, object_name;
195
+
196
+ object_name = values.object_name;
197
+
198
+ if (!object_name) {
199
+ return [];
200
+ }
201
+
202
+ _options = [];
203
+ var objectName = values.object_name;
204
+ if(_.isObject(values.object_name)){
205
+ objectName = objectName.name
206
+ }
207
+ _object = Creator.getObject(objectName);
208
+ fields = _object.fields;
209
+ icon = _object.icon;
210
+
211
+ _.forEach(fields, function (f, k) {
212
+ return _options.push({
213
+ label: f.label || k,
214
+ value: k,
215
+ icon: icon
216
+ });
217
+ });
218
+
219
+ return _options;
220
+ }
221
+ name: unreadable_fields
222
+ filterable: true
223
+ uneditable_fields:
224
+ type: lookup
225
+ label: Uneditable Fields
226
+ hidden: true
227
+ omit: true
228
+ multiple: true
229
+ depend_on:
230
+ - object_name
231
+ optionsFunction: !<tag:yaml.org,2002:js/function> |-
232
+ function (values) {
233
+ var _object, _options, fields, icon, object_name;
234
+
235
+ object_name = values.object_name;
236
+
237
+ if (!object_name) {
238
+ return [];
239
+ }
240
+
241
+ _options = [];
242
+ var objectName = values.object_name;
243
+ if(_.isObject(values.object_name)){
244
+ objectName = objectName.name
245
+ }
246
+ _object = Creator.getObject(objectName);
247
+ fields = _object.fields;
248
+ icon = _object.icon;
249
+
250
+ _.forEach(fields, function (f, k) {
251
+ return _options.push({
252
+ label: f.label || k,
253
+ value: k,
254
+ icon: icon
255
+ });
256
+ });
257
+
258
+ return _options;
259
+ }
260
+ filterable: true
261
+ unrelated_objects:
262
+ type: lookup
263
+ label: Unrelated Objects
264
+ hidden: true
265
+ omit: true
266
+ multiple: true
267
+ depend_on:
268
+ - object_name
269
+ optionsFunction: !<tag:yaml.org,2002:js/function> |-
270
+ function (values) {
271
+ var _options, related_object_names, related_objects;
272
+
273
+ _options = [];
274
+ var objectName = values.object_name;
275
+ if(_.isObject(values.object_name)){
276
+ objectName = objectName.name
277
+ }
278
+ related_objects = Creator.getObject(objectName).related_objects;
279
+ related_object_names = _.uniq(_.pluck(related_objects, "object_name"));
280
+
281
+ _.forEach(related_object_names, function (i) {
282
+ var _object;
283
+
284
+ _object = Creator.getObject(i);
285
+ return _options.push({
286
+ label: _object.label || i,
287
+ value: i,
288
+ icon: _object.icon
289
+ });
290
+ });
291
+
292
+ return _options;
293
+ }
294
+ name: unrelated_objects
295
+ filterable: true
296
+ is_system:
297
+ type: boolean
298
+ label: 系统
299
+ # omit: true
300
+ readonly: true
301
+ visible_on: "{{global.mode ==='read' ? true : false}}"
302
+ disabled: true
303
+ paging:
304
+ enabled: false
305
+ list_views:
306
+ customize:
307
+ columns:
308
+ - permission_set_id
309
+ - object_name
310
+ - allowCreate
311
+ - allowDelete
312
+ - allowEdit
313
+ - allowRead
314
+ - modifyAllRecords
315
+ - viewAllRecords
316
+ - modifyCompanyRecords
317
+ - viewCompanyRecords
318
+ - is_system
319
+ label: Customize
320
+ filters:
321
+ - ["is_system","<>",true]
322
+ filter_scope: space
323
+ system:
324
+ columns:
325
+ - permission_set_id
326
+ - object_name
327
+ - allowCreate
328
+ - allowDelete
329
+ - allowEdit
330
+ - allowRead
331
+ - modifyAllRecords
332
+ - viewAllRecords
333
+ - modifyCompanyRecords
334
+ - viewCompanyRecords
335
+ - is_system
336
+ label: System
337
+ filters:
338
+ - ["is_system","=",true]
339
+ filter_scope: space
340
+ all:
341
+ label: All
342
+ columns:
343
+ - permission_set_id
344
+ - object_name
345
+ - allowCreate
346
+ - allowDelete
347
+ - allowEdit
348
+ - allowRead
349
+ - modifyAllRecords
350
+ - viewAllRecords
351
+ - modifyCompanyRecords
352
+ - viewCompanyRecords
353
+ - is_system
354
+ filter_scope: space
355
+ actions:
356
+ customize:
357
+ label: Customize
358
+ on: record_only
359
+ resetFieldPermissions:
360
+ label: 重置字段权限
361
+ on: record_only
362
+ relatedList:
363
+ - objectName: permission_fields
364
+ columns:
365
+ - field
366
+ - editable
367
+ - readable
368
+ - is_system
369
+ permission_set:
370
+ user:
371
+ allowCreate: false
372
+ allowDelete: false
373
+ allowEdit: false
374
+ allowRead: false
375
+ modifyAllRecords: false
376
+ viewAllRecords: false
377
+ admin:
378
+ allowCreate: true
379
+ allowDelete: true
380
+ allowEdit: true
381
+ allowRead: true
382
+ modifyAllRecords: true
383
+ viewAllRecords: true
384
+ form:
385
+ beforeView: !!js/function |
386
+ function(){
387
+ /*附件权限需要兼容之前没有附件权限配置功能时的设置,取好默认值显示即可*/
388
+ Creator.processPermissions(this.doc);
389
+ }
390
+ beforeEdit: !!js/function |
391
+ function(){
392
+ /*附件权限需要兼容之前没有附件权限配置功能时的设置,取好默认值显示即可*/
393
+ Creator.processPermissions(this.doc);
394
+ }
@@ -0,0 +1,17 @@
1
+ module.exports = {
2
+ customize: function (object_name, record_id, fields) {
3
+ var doc = Creator.odata.get(object_name, record_id)
4
+ Creator.odata.insert(object_name, {name: doc.name, label: doc.label, type: doc.type, license: doc.license}, function(result, error){
5
+ if(result){
6
+ FlowRouter.go(`/app/-/${object_name}/view/${result._id}`)
7
+ }
8
+ });
9
+
10
+ },
11
+ customizeVisible: function(object_name, record_id, record_permissions, record){
12
+ if(!record){
13
+ record = {}
14
+ }
15
+ return Creator.baseObject.actions.standard_new.visible() && record.is_system;
16
+ }
17
+ }