@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.
- package/main/default/applications/.gitkeep +0 -0
- package/main/default/client/permission_set.client.js +38 -0
- package/main/default/objectTranslations/permission_objects.en/permission_objects.en.objectTranslation.yml +108 -0
- package/main/default/objectTranslations/permission_objects.zh-CN/permission_objects.zh-CN.objectTranslation.yml +108 -0
- package/main/default/objectTranslations/permission_set.en/permission_set.en.objectTranslation.yml +87 -0
- package/main/default/objectTranslations/permission_set.zh-CN/permission_set.zh-CN.objectTranslation.yml +87 -0
- package/main/default/objectTranslations/permission_shares.en/permission_shares.en.objectTranslation.yml +27 -0
- package/main/default/objectTranslations/permission_shares.zh-CN/permission_shares.zh-CN.objectTranslation.yml +27 -0
- package/main/default/objects/permission_fields.object.yml +184 -0
- package/main/default/objects/permission_objects.action.js +57 -0
- package/main/default/objects/permission_objects.function.js +23 -0
- package/main/default/objects/permission_objects.object.js +20 -0
- package/main/default/objects/permission_objects.object.yml +394 -0
- package/main/default/objects/permission_set/buttons/permission_set.action.js +17 -0
- package/main/default/objects/permission_set/permission_set.object.yml +268 -0
- package/main/default/objects/permission_shares.object.js +57 -0
- package/main/default/objects/permission_shares.object.yml +63 -0
- package/main/default/objects/restriction_rules.action.js +25 -0
- package/main/default/objects/restriction_rules.object.yml +82 -0
- package/main/default/objects/share_rules.action.js +25 -0
- package/main/default/objects/share_rules.object.yml +82 -0
- package/main/default/permissionsets/.gitkeep +0 -0
- package/main/default/profiles/.gitkeep +0 -0
- package/main/default/routes/copyProfile.router.js +113 -0
- package/main/default/server/permission_set.object.js +130 -0
- package/main/default/tabs/.gitkeep +0 -0
- package/main/default/triggers/.gitkeep +0 -0
- package/main/default/triggers/permission_fields.trigger.js +94 -0
- package/main/default/triggers/permission_objects.trigger.js +159 -0
- package/main/default/triggers/permission_set.trigger.js +89 -0
- package/main/default/triggers/restriction_rules.trigger.js +67 -0
- package/main/default/triggers/restriction_rules_api_name.trigger.js +30 -0
- package/main/default/triggers/share_rules.trigger.js +68 -0
- package/main/default/triggers/share_rules_api_name.trigger.js +30 -0
- package/package.json +16 -0
- package/package.service.js +75 -0
- package/public/.md +3 -0
- package/src/.md +3 -0
- 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
|