@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,268 @@
1
+ name: permission_set
2
+ label: Permission Set
3
+ icon: groups
4
+ hidden: false
5
+ enable_inline_edit: false
6
+ version: 2
7
+ paging:
8
+ enabled: false
9
+ fields:
10
+ name:
11
+ label: Name
12
+ type: text
13
+ searchable: true
14
+ index: true
15
+ required: true
16
+ label:
17
+ label: Label
18
+ type: text
19
+ searchable: true
20
+ index: true
21
+ is_name: true
22
+ required: true
23
+ type:
24
+ label: Type
25
+ type: select
26
+ firstOption: false
27
+ options: Profile:profile,Permission set:permission_set
28
+ defaultValue: permission_set
29
+ license:
30
+ label: License
31
+ type: lookup
32
+ optionsFunction: !!js/function
33
+ function(){
34
+ return Steedos.getLicenseOptions();
35
+ }
36
+ showIcon: false
37
+ # required: "{{ 'profile' === formData.type }}"
38
+ assigned_apps:
39
+ label: Assigned Apps
40
+ type: lookup
41
+ multiple: true
42
+ optionsFunction: !<tag:yaml.org,2002:js/function> |-
43
+ function () {
44
+ var _options;
45
+
46
+ _options = [];
47
+
48
+ _.forEach(Creator.Apps, function (o, k) {
49
+ return _options.push({
50
+ label: o.label || o.name,
51
+ value: k,
52
+ icon: o.icon_slds
53
+ });
54
+ });
55
+
56
+ return _options;
57
+ }
58
+ name: assigned_apps
59
+ filterable: true
60
+ users:
61
+ label: Users
62
+ type: lookup
63
+ reference_to: users
64
+ multiple: true
65
+ is_wide: true
66
+ filterable: true
67
+ depend_on:
68
+ - type
69
+ inlineHelpText: When the type is a profile, no user needs to be selected
70
+ visible_on: "{{'permission_set' === formData.type}}"
71
+ is_system:
72
+ type: boolean
73
+ label: System
74
+ # omit: true
75
+ readonly: true
76
+ visible_on: "{{global.mode ==='read' ? true : false}}"
77
+ disabled: true
78
+ password_history:
79
+ type: lookup
80
+ group: profile password policy
81
+ showIcon: false
82
+ label: 强制密码历史
83
+ optionsFunction: !!js/function |
84
+ function(){
85
+ var options = [];
86
+ //TODO 支持value = 0
87
+ for(var i= 1; i < 25; i++){
88
+ options.push({label: TAPi18n.__('permission_set_field_password_history_options', i), value: `${i}`})
89
+ }
90
+ return options;
91
+ }
92
+ defaultValue: '3'
93
+ visible_on: "{{'profile' === formData.type ? true: false}}"
94
+ max_login_attempts:
95
+ type: select
96
+ label: 最大无效登录尝试次数
97
+ group: profile password policy
98
+ firstOption: false
99
+ required: true
100
+ options:
101
+ - label: '3'
102
+ value: '3'
103
+ - label: '5'
104
+ value: '5'
105
+ - label: '10'
106
+ value: '10'
107
+ - label: '无限制'
108
+ value: '0'
109
+ defaultValue: '10'
110
+ visible_on: "{{'profile' === formData.type ? true: false}}"
111
+ lockout_interval:
112
+ type: select
113
+ group: profile password policy
114
+ label: 锁定有效期间
115
+ firstOption: false
116
+ required: true
117
+ options:
118
+ - label: '15 分钟'
119
+ value: '15'
120
+ - label: '30 分钟'
121
+ value: '30'
122
+ - label: '60 分钟'
123
+ value: '60'
124
+ - label: '始终(必须由管理员重置)'
125
+ value: '0'
126
+ defaultValue: '15'
127
+ visible_on: "{{'profile' === formData.type ? true: false}}"
128
+ enable_MFA:
129
+ type: boolean
130
+ label: 多重身份验证(需要开启短信服务)
131
+ inlineHelpText: 密码登陆的基础上增加短信验证的两种组合的鉴别技术进行系统登陆.
132
+ sort_no: 1200
133
+ group: 登录策略
134
+ visible_on: "{{'profile' === formData.type ? true: false}}"
135
+ logout_other_clients:
136
+ type: boolean
137
+ label: 单例登录
138
+ inlineHelpText: 注销以当前用户身份登录的其他客户端。
139
+ sort_no: 1100
140
+ group: 登录策略
141
+ visible_on: "{{'profile' === formData.type ? true: false}}"
142
+ login_expiration_in_days:
143
+ type: number
144
+ scale: 4
145
+ label: 登录到期时间(天)
146
+ sort_no: 1000
147
+ defaultValue: 90
148
+ group: 登录策略
149
+ visible_on: "{{'profile' === formData.type ? true: false}}"
150
+ phone_logout_other_clients:
151
+ type: boolean
152
+ label: 手机App单例登录
153
+ inlineHelpText: 注销以当前用户身份登录的其他客户端。
154
+ sort_no: 1100
155
+ group: 登录策略
156
+ visible_on: "{{'profile' === formData.type ? true: false}}"
157
+ phone_login_expiration_in_days:
158
+ type: number
159
+ scale: 4
160
+ label: 手机App登录到期时间(天)
161
+ sort_no: 1000
162
+ defaultValue: 90
163
+ group: 登录策略
164
+ visible_on: "{{'profile' === formData.type ? true: false}}"
165
+ list_views:
166
+ all:
167
+ label: All
168
+ filter_scope: space
169
+ columns:
170
+ - label
171
+ - name
172
+ - users
173
+ - type
174
+ - license
175
+ - is_system
176
+ permission_set:
177
+ label: Permission Set
178
+ filter_scope: space
179
+ filters:
180
+ - [["type", "=", "permission_set"]]
181
+ columns:
182
+ - label
183
+ - name
184
+ - users
185
+ - type
186
+ - license
187
+ - is_system
188
+ profile:
189
+ label: Profile
190
+ filter_scope: space
191
+ filters:
192
+ - [["type", "=", "profile"]]
193
+ columns:
194
+ - label
195
+ - name
196
+ - type
197
+ - license
198
+ - is_system
199
+ actions:
200
+ customize:
201
+ label: Customize
202
+ on: record_only
203
+ # relatedList:
204
+ # - objectName: permission_objects
205
+ # filters: !!js/function |
206
+ # function(parentRecord) {
207
+ # return [["is_system","=",true], ["permission_set_id","=",parentRecord._id]]
208
+ # }
209
+ # - objectName: permission_objects
210
+ # filters: !!js/function |
211
+ # function(parentRecord) {
212
+ # return [["is_system","<>",true], ["permission_set_id","=",parentRecord._id]]
213
+ # }
214
+ permission_set:
215
+ user:
216
+ allowCreate: false
217
+ allowDelete: false
218
+ allowEdit: false
219
+ allowRead: false
220
+ modifyAllRecords: false
221
+ viewAllRecords: false
222
+ admin:
223
+ allowCreate: true
224
+ allowDelete: true
225
+ allowEdit: true
226
+ allowRead: true
227
+ modifyAllRecords: true
228
+ viewAllRecords: true
229
+ customer:
230
+ allowCreate: false
231
+ allowDelete: false
232
+ allowEdit: false
233
+ allowRead: false
234
+ modifyAllRecords: false
235
+ viewAllRecords: false
236
+ form:
237
+ initialValues: !!js/function |
238
+ function(){
239
+ var listView = Creator.getListView();
240
+ if(listView && listView.name === 'profile'){
241
+ return {type: 'profile'}
242
+ }
243
+ return {}
244
+ }
245
+ beforeEdit: !!js/function |
246
+ function(){
247
+ Steedos.PermissionSetManager.changeSchema(this.doc, this.schema);
248
+ }
249
+ afterEdit: !!js/function |
250
+ function(){
251
+ Steedos.PermissionSetManager.changeSchema(this.doc, this.schema);
252
+ }
253
+ beforeView: !!js/function |
254
+ function(){
255
+ Steedos.PermissionSetManager.changeSchema(this.doc, this.schema);
256
+ }
257
+ beforeInsert: !!js/function |
258
+ function(){
259
+ if(this.doc && _.isString(this.doc.users)){
260
+ this.doc.users = this.doc.users.split(',');
261
+ }
262
+ }
263
+ beforeUpdate: !!js/function |
264
+ function(){
265
+ if(this.doc && _.isString(this.doc.users)){
266
+ this.doc.users = this.doc.users.split(',');
267
+ }
268
+ }
@@ -0,0 +1,57 @@
1
+ const objectql = require('@steedos/objectql');
2
+
3
+ Creator.Objects['permission_shares'].triggers = Object.assign({}, Creator.Objects['permission_shares'].triggers, {
4
+ "before.insert.server.sharing": {
5
+ on: "server",
6
+ when: "before.insert",
7
+ todo: function (userId, doc) {
8
+ if (_.isEmpty(doc.organizations) && _.isEmpty(doc.users)) {
9
+ throw new Meteor.Error(500, "请在授权组织或授权用户中至少填写一个值");
10
+ }
11
+ }
12
+ },
13
+ "before.update.server.sharing": {
14
+ on: "server",
15
+ when: "before.update",
16
+ todo: function (userId, doc, fieldNames, modifier, options) {
17
+ var errMsg;
18
+ errMsg = t("creator_permission_share_miss");
19
+ if (fieldNames.length === 1) {
20
+ if (fieldNames.indexOf("organizations") > -1) {
21
+ if (_.isEmpty(modifier.$set.organizations) && _.isEmpty(doc.users)) {
22
+ throw new Meteor.Error(500, errMsg);
23
+ }
24
+ } else if (fieldNames.indexOf("users") > -1) {
25
+ if (_.isEmpty(doc.organizations) && _.isEmpty(modifier.$set.users)) {
26
+ throw new Meteor.Error(500, errMsg);
27
+ }
28
+ }
29
+ } else if (_.isEmpty(modifier.$set.organizations) && _.isEmpty(modifier.$set.users)) {
30
+ throw new Meteor.Error(500, errMsg);
31
+ }
32
+ }
33
+ }
34
+ })
35
+
36
+ if(Meteor.isServer){
37
+ Meteor.startup(function() {
38
+ let objectName = 'permission_shares';
39
+ Creator.getCollection(objectName).find({}, {
40
+ fields: {
41
+ _id: 1,
42
+ object_name: 1,
43
+ filters: 1
44
+ }
45
+ }).observe({
46
+ added: function(doc){
47
+ objectql.addConfig(objectName, doc)
48
+ },
49
+ changed: function(doc){
50
+ objectql.addConfig(objectName, doc)
51
+ },
52
+ removed: function(doc){
53
+ objectql.removeConfig(objectName, doc)
54
+ }
55
+ })
56
+ });
57
+ }
@@ -0,0 +1,63 @@
1
+ name: permission_shares
2
+ label: Permission Share
3
+ icon: assigned_resource
4
+ hidden: true
5
+ fields:
6
+ name:
7
+ label: Name
8
+ type: text
9
+ required: true
10
+ searchable: true
11
+ index: true
12
+ object_name:
13
+ label: Object
14
+ type: lookup
15
+ multiple: true
16
+ optionsFunction: !<tag:yaml.org,2002:js/function> |-
17
+ function () {
18
+ return Steedos.getObjectsOptions(function(o){
19
+ return o.enable_share
20
+ })
21
+ }
22
+ required: true
23
+ filterable: true
24
+ filters:
25
+ label: Filters
26
+ type: textarea
27
+ inlineHelpText: Format of OData Filters Required.
28
+ is_wide: true
29
+ organizations:
30
+ label: Departments
31
+ type: lookup
32
+ reference_to: organizations
33
+ multiple: true
34
+ defaultValue: []
35
+ filterable: true
36
+ users:
37
+ label: Users
38
+ type: lookup
39
+ reference_to: users
40
+ multiple: true
41
+ defaultValue: []
42
+ filterable: true
43
+ list_views:
44
+ all:
45
+ label: All
46
+ filter_scope: space
47
+ columns:
48
+ - name
49
+ permission_set:
50
+ user:
51
+ allowCreate: true
52
+ allowDelete: true
53
+ allowEdit: true
54
+ allowRead: true
55
+ modifyAllRecords: false
56
+ viewAllRecords: false
57
+ admin:
58
+ allowCreate: true
59
+ allowDelete: true
60
+ allowEdit: true
61
+ allowRead: true
62
+ modifyAllRecords: true
63
+ viewAllRecords: true
@@ -0,0 +1,25 @@
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
+ Creator.odata.insert(object_name, Object.assign(newDoc), function (result, error) {
14
+ if (result) {
15
+ FlowRouter.go(`/app/-/${object_name}/view/${result._id}`)
16
+ }
17
+ });
18
+ },
19
+ customizeVisible: function (object_name, record_id, record_permissions, record) {
20
+ if (!record) {
21
+ record = {}
22
+ }
23
+ return Creator.baseObject.actions.standard_new.visible() && record.is_system;
24
+ }
25
+ }
@@ -0,0 +1,82 @@
1
+ name: restriction_rules
2
+ label: 限制规则
3
+ icon: filter_criteria
4
+ version: 2
5
+ fields:
6
+ name:
7
+ label: Api 名称
8
+ type: text
9
+ sort_no: 110
10
+ required: true
11
+ object_name:
12
+ type: lookup
13
+ label: 对象
14
+ reference_to: objects
15
+ write_requires_master_read: true
16
+ reference_to_field: name
17
+ required: true
18
+ optionsFunction: !<tag:yaml.org,2002:js/function> |-
19
+ function () {
20
+ return Steedos.getObjectsOptions();
21
+ }
22
+ sort_no: 120
23
+ active:
24
+ label: 启用
25
+ type: boolean
26
+ sort_no: 130
27
+ entry_criteria:
28
+ label: 指定条目条件
29
+ inlineHelpText: "满足此条件的时,使用该记录过滤器。语法为函数表达式, 例如: {{$user.profile !='user'}}"
30
+ type: textarea
31
+ is_wide: true
32
+ sort_no: 140
33
+ required: true
34
+ record_filter:
35
+ label: 记录过滤器
36
+ type: textarea
37
+ is_wide: true
38
+ sort_no: 150
39
+ required: true
40
+ description:
41
+ label: 描述
42
+ type: textarea
43
+ is_wide: true
44
+ sort_no: 160
45
+ is_system:
46
+ type: boolean
47
+ label: 系统
48
+ # omit: true
49
+ readonly: true
50
+ disabled: true
51
+ visible_on: "{{global.mode ==='read' ? true : false}}"
52
+ actions:
53
+ customize:
54
+ label: 自定义
55
+ on: record
56
+ list_views:
57
+ all:
58
+ label: All Roles
59
+ filter_scope: space
60
+ columns:
61
+ - name
62
+ - object_name
63
+ - active
64
+ - entry_criteria
65
+ - record_filter
66
+ - description
67
+ - is_system
68
+ permission_set:
69
+ user:
70
+ allowCreate: false
71
+ allowDelete: false
72
+ allowEdit: false
73
+ allowRead: false
74
+ modifyAllRecords: false
75
+ viewAllRecords: false
76
+ admin:
77
+ allowCreate: true
78
+ allowDelete: true
79
+ allowEdit: true
80
+ allowRead: true
81
+ modifyAllRecords: true
82
+ viewAllRecords: true
@@ -0,0 +1,25 @@
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
+ Creator.odata.insert(object_name, Object.assign(newDoc), function (result, error) {
14
+ if (result) {
15
+ FlowRouter.go(`/app/-/${object_name}/view/${result._id}`)
16
+ }
17
+ });
18
+ },
19
+ customizeVisible: function (object_name, record_id, record_permissions, record) {
20
+ if (!record) {
21
+ record = {}
22
+ }
23
+ return Creator.baseObject.actions.standard_new.visible() && record.is_system;
24
+ }
25
+ }
@@ -0,0 +1,82 @@
1
+ name: share_rules
2
+ label: 共享规则
3
+ icon: assigned_resource
4
+ version: 2
5
+ fields:
6
+ name:
7
+ label: Api 名称
8
+ type: text
9
+ sort_no: 110
10
+ required: true
11
+ object_name:
12
+ type: lookup
13
+ label: 对象
14
+ reference_to: objects
15
+ write_requires_master_read: true
16
+ reference_to_field: name
17
+ required: true
18
+ optionsFunction: !<tag:yaml.org,2002:js/function> |-
19
+ function () {
20
+ return Steedos.getObjectsOptions();
21
+ }
22
+ sort_no: 120
23
+ active:
24
+ label: 启用
25
+ type: boolean
26
+ sort_no: 130
27
+ entry_criteria:
28
+ label: 指定条目条件
29
+ inlineHelpText: "满足此条件的时,使用该记录过滤器。语法为函数表达式, 例如: {{$user.profile !='user'}}"
30
+ type: textarea
31
+ is_wide: true
32
+ sort_no: 140
33
+ required: true
34
+ record_filter:
35
+ label: 记录过滤器
36
+ type: textarea
37
+ is_wide: true
38
+ sort_no: 150
39
+ required: true
40
+ description:
41
+ label: 描述
42
+ type: textarea
43
+ is_wide: true
44
+ sort_no: 160
45
+ is_system:
46
+ type: boolean
47
+ label: 系统
48
+ # omit: true
49
+ readonly: true
50
+ disabled: true
51
+ visible_on: "{{global.mode ==='read' ? true : false}}"
52
+ actions:
53
+ customize:
54
+ label: 自定义
55
+ on: record
56
+ list_views:
57
+ all:
58
+ label: All Roles
59
+ filter_scope: space
60
+ columns:
61
+ - name
62
+ - object_name
63
+ - active
64
+ - entry_criteria
65
+ - record_filter
66
+ - description
67
+ - is_system
68
+ permission_set:
69
+ user:
70
+ allowCreate: false
71
+ allowDelete: false
72
+ allowEdit: false
73
+ allowRead: false
74
+ modifyAllRecords: false
75
+ viewAllRecords: false
76
+ admin:
77
+ allowCreate: true
78
+ allowDelete: true
79
+ allowEdit: true
80
+ allowRead: true
81
+ modifyAllRecords: true
82
+ viewAllRecords: true
File without changes
File without changes