@steedos/standard-permission 3.0.0-beta.7 → 3.0.0-beta.70

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.
@@ -1,44 +1,11 @@
1
+ /*
2
+ * @Author: 殷亮辉 yinlianghui@hotoa.com
3
+ * @Date: 2025-07-07 16:57:38
4
+ * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
5
+ * @LastEditTime: 2025-08-11 14:55:44
6
+ */
1
7
  const _ = require("underscore");
2
8
  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(_.includes(['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(_.includes(['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, data){
36
- var record = data && data.record;
37
- if(!record){
38
- record = {}
39
- }
40
- return Steedos.Object.base.actions.standard_new.visible() && record.is_system;
41
- },
42
9
  resetFieldPermissions: function (object_name, record_id) {
43
10
  var doc = Creator.odata.get(object_name, record_id);
44
11
  var result = Steedos.authRequest(`/api/v4/${object_name}/${record_id}/resetFieldPermissions`, { type: 'get', async: false });
@@ -17,6 +17,7 @@ fields:
17
17
  required: true
18
18
  reference_to: permission_set
19
19
  index: true
20
+ is_name: true
20
21
  name: permission_set_id
21
22
  filterable: true
22
23
  reference_limit: 5000
@@ -313,9 +314,6 @@ list_views:
313
314
  - is_system
314
315
  filter_scope: space
315
316
  actions:
316
- customize:
317
- label: Customize
318
- on: record_only
319
317
  resetFieldPermissions:
320
318
  label: 重置字段权限
321
319
  on: record_only
@@ -205,10 +205,6 @@ list_views:
205
205
  - type
206
206
  - license
207
207
  - is_system
208
- actions:
209
- customize:
210
- label: Customize
211
- on: record_only
212
208
  # relatedList:
213
209
  # - objectName: permission_objects
214
210
  # filters: !!js/function |
@@ -34,7 +34,7 @@ fields:
34
34
  required: true
35
35
  record_filter:
36
36
  label: 记录过滤器
37
- inlineHelpText: "满足指定条目条件时,使用该记录过滤器限制指定的数据。语法为 Amis <a href = 'https://aisuda.bce.baidu.com/amis/zh-CN/docs/concepts/data-mapping' target='_blank'>数据映射</a> 或 <a href = 'https://aisuda.bce.baidu.com/amis/zh-CN/docs/concepts/expression' target='_blank'>表达式</a>, 例如: \\${[[\"owner\", \"=\", global.userId]]},更多详情请参考 <a href='https://docs.steedos.com/zh-CN/admin/permissions/restriction-rules' target='_blank'>此文档</a>。"
37
+ inlineHelpText: "满足指定条目条件时,使用该记录过滤器限制指定的数据。语法为 Amis <a href = 'https://aisuda.bce.baidu.com/amis/zh-CN/docs/concepts/data-mapping' target='_blank'>数据映射</a> 或 <a href = 'https://aisuda.bce.baidu.com/amis/zh-CN/docs/concepts/expression' target='_blank'>表达式</a>"
38
38
  type: textarea
39
39
  is_wide: true
40
40
  sort_no: 150
@@ -51,6 +51,13 @@ fields:
51
51
  readonly: true
52
52
  disabled: true
53
53
  visible_on: "{{global.mode ==='read' ? true : false}}"
54
+ version:
55
+ label: 版本
56
+ type: number
57
+ defaultValue: 2
58
+ # readonly: true 不可以设置为只读,新建编辑表单需要加载这个字段值
59
+ visible_on: "${false}"
60
+ inlineHelpText: "版本号,用于记录规则更新,比如版本>=2时,record_filter 显示为amis过滤器"
54
61
  actions:
55
62
  customize:
56
63
  label: 自定义
@@ -36,7 +36,7 @@ fields:
36
36
  required: true
37
37
  record_filter:
38
38
  label: 记录过滤器
39
- inlineHelpText: "满足指定条目条件时,使用该记录过滤器共享指定的数据。语法为 Amis <a href = 'https://aisuda.bce.baidu.com/amis/zh-CN/docs/concepts/data-mapping' target='_blank'>数据映射</a> 或 <a href = 'https://aisuda.bce.baidu.com/amis/zh-CN/docs/concepts/expression' target='_blank'>表达式</a>, 例如: \\${[[\"owner\", \"=\", global.userId]]},更多详情请参考 <a href='https://docs.steedos.com/zh-CN/admin/permissions/sharing-rules' target='_blank'>此文档</a>。"
39
+ inlineHelpText: "满足指定条目条件时,使用该记录过滤器共享指定的数据。语法为 Amis <a href = 'https://aisuda.bce.baidu.com/amis/zh-CN/docs/concepts/data-mapping' target='_blank'>数据映射</a> 或 <a href = 'https://aisuda.bce.baidu.com/amis/zh-CN/docs/concepts/expression' target='_blank'>表达式</a>。"
40
40
  type: textarea
41
41
  is_wide: true
42
42
  sort_no: 150
@@ -54,6 +54,13 @@ fields:
54
54
  disabled: true
55
55
  visible_on: "{{global.mode ==='read' ? true : false}}"
56
56
  sort_no: 99999
57
+ version:
58
+ label: 版本
59
+ type: number
60
+ defaultValue: 2
61
+ # readonly: true 不可以设置为只读,新建编辑表单需要加载这个字段值
62
+ visible_on: "${false}"
63
+ inlineHelpText: "版本号,用于记录规则更新,比如版本>=2时,record_filter 显示为amis过滤器"
57
64
  actions:
58
65
  customize:
59
66
  label: 自定义
@@ -0,0 +1,79 @@
1
+ {
2
+ "type": "service",
3
+ "body": [
4
+ {
5
+ "type": "steedos-object-form",
6
+ "label": "对象表单",
7
+ "objectApiName": "restriction_rules",
8
+ "recordId": "${recordId}",
9
+ "className": "",
10
+ "enableTabs": false,
11
+ "mode": "edit",
12
+ "layout": "normal",
13
+ "tabsMode": "",
14
+ "onEvent": {
15
+ "inited": {
16
+ "actions": [
17
+ {
18
+ "actionType": "custom",
19
+ "script": "event.data.formulaVariables = SteedosUI.getFormulaVariables();"
20
+ },
21
+ {
22
+ "actionType": "setValue",
23
+ "args": {
24
+ "value": {
25
+ "formulaVariables": "${event.data.formulaVariables}"
26
+ }
27
+ },
28
+ "componentId": "page_restriction_rules_form"
29
+ }
30
+ ]
31
+ }
32
+ },
33
+ "initApiAdaptor": "if (recordId && payload.data.version > 1) {\n var data = payload.data;\n if (data) {\n if (typeof data.record_filter === 'string') {\n try{\n data.record_filter = JSON.parse(data.record_filter);\n }\n catch(e){\n data.record_filter = [];\n }\n };\n data.record_filter = window.amisConvert.filtersToConditions(data.record_filter || []);\n }\n payload.data = data;\n}\nreturn payload;",
34
+ "apiRequestAdaptor": "if (formData.record_filter && formData.version > 1) {\n formData.record_filter = JSON.stringify(window.amisConvert.conditionsToFilters(formData.record_filter));\n}\n__saveData = JSON.stringify(JSON.stringify(formData));\napi.data = { query: query.replace('{__saveData}', __saveData) };\n",
35
+ "fieldsExtend": {
36
+ "entry_criteria": {
37
+ "amis": {
38
+ "type": "input-formula",
39
+ "evalMode": false,
40
+ "variableMode": "tabs",
41
+ "variables": "${formulaVariables}",
42
+ "visibleOn": "${formulaVariables}"
43
+ }
44
+ },
45
+ "record_filter": {
46
+ "amis": {
47
+ "type": "control",
48
+ "body": [
49
+ {
50
+ "type": "condition-builder",
51
+ "name": "record_filter",
52
+ "description": "",
53
+ "source": {
54
+ "method": "get",
55
+ "url": "${context.rootUrl}/service/api/amis-metadata-listviews/getFilterFields?objectName=${object_name}",
56
+ "dataType": "json",
57
+ "headers": {
58
+ "Authorization": "Bearer ${context.tenantId},${context.authToken}"
59
+ }
60
+ },
61
+ "className": "col-span-2 m-0",
62
+ "visibleOn": "${object_name && version > 1}"
63
+ },
64
+ {
65
+ "type": "textarea",
66
+ "name": "record_filter",
67
+ "visibleOn": "${!version || version <= 1}"
68
+ }
69
+ ]
70
+ }
71
+ }
72
+ }
73
+ }
74
+ ],
75
+ "data": {},
76
+ "id": "page_restriction_rules_form",
77
+ "name": "page_restriction_rules_form",
78
+ "dsType": "api"
79
+ }
@@ -0,0 +1,13 @@
1
+ name: restriction_rules_form
2
+ is_active: true
3
+ label: 限制规则表单
4
+ locked: false
5
+ object_name: restriction_rules
6
+ pageAssignments:
7
+ - type: orgDefault
8
+ page: restriction_rules_form
9
+ desktop: true
10
+ mobile: true
11
+ render_engine: amis
12
+ type: form
13
+ widgets: []
@@ -0,0 +1,79 @@
1
+ {
2
+ "type": "service",
3
+ "body": [
4
+ {
5
+ "type": "steedos-object-form",
6
+ "label": "对象表单",
7
+ "objectApiName": "share_rules",
8
+ "recordId": "${recordId}",
9
+ "className": "",
10
+ "enableTabs": false,
11
+ "mode": "edit",
12
+ "layout": "normal",
13
+ "tabsMode": "",
14
+ "onEvent": {
15
+ "inited": {
16
+ "actions": [
17
+ {
18
+ "actionType": "custom",
19
+ "script": "event.data.formulaVariables = SteedosUI.getFormulaVariables();"
20
+ },
21
+ {
22
+ "actionType": "setValue",
23
+ "args": {
24
+ "value": {
25
+ "formulaVariables": "${event.data.formulaVariables}"
26
+ }
27
+ },
28
+ "componentId": "page_share_rules_form"
29
+ }
30
+ ]
31
+ }
32
+ },
33
+ "initApiAdaptor": "if (recordId && payload.data.version > 1) {\n var data = payload.data;\n if (data) {\n if (typeof data.record_filter === 'string') {\n try{\n data.record_filter = JSON.parse(data.record_filter);\n }\n catch(e){\n data.record_filter = [];\n }\n };\n data.record_filter = window.amisConvert.filtersToConditions(data.record_filter || []);\n }\n payload.data = data;\n}\nreturn payload;",
34
+ "apiRequestAdaptor": "if (formData.record_filter && formData.version > 1) {\n formData.record_filter = JSON.stringify(window.amisConvert.conditionsToFilters(formData.record_filter));\n}\n__saveData = JSON.stringify(JSON.stringify(formData));\napi.data = { query: query.replace('{__saveData}', __saveData) };\n",
35
+ "fieldsExtend": {
36
+ "entry_criteria": {
37
+ "amis": {
38
+ "type": "input-formula",
39
+ "evalMode": false,
40
+ "variableMode": "tabs",
41
+ "variables": "${formulaVariables}",
42
+ "visibleOn": "${formulaVariables}"
43
+ }
44
+ },
45
+ "record_filter": {
46
+ "amis": {
47
+ "type": "control",
48
+ "body": [
49
+ {
50
+ "type": "condition-builder",
51
+ "name": "record_filter",
52
+ "description": "",
53
+ "source": {
54
+ "method": "get",
55
+ "url": "${context.rootUrl}/service/api/amis-metadata-listviews/getFilterFields?objectName=${object_name}",
56
+ "dataType": "json",
57
+ "headers": {
58
+ "Authorization": "Bearer ${context.tenantId},${context.authToken}"
59
+ }
60
+ },
61
+ "className": "col-span-2 m-0",
62
+ "visibleOn": "${object_name && version > 1}"
63
+ },
64
+ {
65
+ "type": "textarea",
66
+ "name": "record_filter",
67
+ "visibleOn": "${!version || version <= 1}"
68
+ }
69
+ ]
70
+ }
71
+ }
72
+ }
73
+ }
74
+ ],
75
+ "data": {},
76
+ "id": "page_share_rules_form",
77
+ "name": "page_share_rules_form",
78
+ "dsType": "api"
79
+ }
@@ -0,0 +1,13 @@
1
+ name: share_rules_form
2
+ is_active: true
3
+ label: 共享规则表单
4
+ locked: false
5
+ object_name: share_rules
6
+ pageAssignments:
7
+ - type: orgDefault
8
+ page: share_rules_form
9
+ desktop: true
10
+ mobile: true
11
+ render_engine: amis
12
+ type: form
13
+ widgets: []
@@ -186,13 +186,15 @@ module.exports = {
186
186
  return processPermissions(doc)
187
187
  },
188
188
  beforeUpdate: async function () {
189
- let oldDoc = objectql.getObject("permission_set").directFindOne({_id: this.id})
189
+ let oldDoc = await objectql.getObject("permission_set").findOne(this.id)
190
190
  let doc = this.doc;
191
191
  let permission_set_id = doc.permission_set_id || oldDoc.permission_set_id
192
192
  let object_name = doc.object_name || oldDoc.object_name
193
- let space = oldDoc.space
194
- let existedCount = objectql.getObject("permission_set").directFind({permission_set_id: permission_set_id, object_name: object_name, space: space, _id: {$ne: this.id}}).length;
195
- if(existedCount > 0){
193
+ let space = this.space
194
+ let dbRecords = await objectql.getObject("permission_set").directFind({
195
+ filters: [['permission_set_id', '=', permission_set_id], ['object_name', '=', object_name], ['space', '=', space], ['_id', '!=', this.id]]
196
+ });
197
+ if(dbRecords.length > 0){
196
198
  throw new Error("此对象已有权限对象记录")
197
199
  }
198
200
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steedos/standard-permission",
3
- "version": "3.0.0-beta.7",
3
+ "version": "3.0.0-beta.70",
4
4
  "main": "package.service.js",
5
5
  "private": false,
6
6
  "publishConfig": {
@@ -12,7 +12,7 @@
12
12
  "description": "steedos package",
13
13
  "repository": {},
14
14
  "license": "MIT",
15
- "gitHead": "b68a33d2fa33b380aa7ec401b63315886f7de861",
15
+ "gitHead": "597f124ef73efa97a2da52b4de3c7d733ebd6887",
16
16
  "dependencies": {
17
17
  "clone": "^2.1.2"
18
18
  }
@@ -1,20 +0,0 @@
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, lockout_interval: doc.lockout_interval, max_login_attempts: doc.max_login_attempts, password_history: doc.password_history,
5
- default_standard_buttons: doc.default_standard_buttons
6
- }, function(result, error){
7
- if(result){
8
- FlowRouter.go(`/app/-/${object_name}/view/${result._id}`)
9
- }
10
- });
11
-
12
- },
13
- customizeVisible: function(object_name, record_id, record_permissions, data){
14
- var record = data && data.record;
15
- if(!record){
16
- record = {}
17
- }
18
- return Steedos.Object.base.actions.standard_new.visible() && record.is_system;
19
- }
20
- }
@@ -1,57 +0,0 @@
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
- }
@@ -1,31 +0,0 @@
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, data) {
28
- var record = data && data.record;
29
- return record && Steedos.Object.base.actions.standard_new.visible() && record.is_system;
30
- }
31
- }
@@ -1,4 +0,0 @@
1
- name: customize
2
- is_enable: true
3
- label: 自定义
4
- 'on': record_only
@@ -1,130 +0,0 @@
1
- var _ = require("underscore");
2
- function checkType(name, type){
3
- if(_.include(['admin','user','supplier','customer'], name) && type != 'profile'){
4
- throw new Meteor.Error(500, "API名称为admin,user,supplier,customer时,类别必须为简档");
5
- }
6
- }
7
-
8
- Creator.Objects['permission_set'].triggers = Object.assign({}, Creator.Objects['permission_set'].triggers,{
9
- "before.insert.server.check": {
10
- on: "server",
11
- when: "before.insert",
12
- todo: function (userId, doc) {
13
- var newName;
14
- // console.log "before.insert.server.check,doc:", doc
15
- newName = doc != null ? doc.name : void 0;
16
- if (newName && Creator.getCollection("permission_set").findOne({
17
- space: doc.space,
18
- name: newName
19
- }, {
20
- fields: {
21
- name: 1
22
- }
23
- })) {
24
- throw new Meteor.Error(500, "API名称不能重复");
25
- }
26
- checkType(doc.name, doc.type);
27
- if(doc.type === 'profile'){
28
- if(!doc.license){
29
- // throw new Meteor.Error(500, "请指定许可证");
30
- }else{
31
- // if(_.indexOf(_.pluck(Steedos.getLicenseOptionsSync(doc.space), 'value'), doc.license) < 0){
32
- // throw new Meteor.Error(500, "无效的许可证");
33
- // }
34
- }
35
- }
36
-
37
- // if(doc.license){
38
- // if(_.indexOf(_.pluck(Steedos.getLicenseOptionsSync(doc.space), 'value'), doc.license) < 0){
39
- // throw new Meteor.Error(500, "无效的许可证");
40
- // }
41
- // }
42
-
43
- if(doc.type === 'profile'){
44
- delete doc.users
45
- }
46
- }
47
- },
48
- "before.update.server.check": {
49
- on: "server",
50
- when: "before.update",
51
- todo: function (userId, doc, fieldNames, modifier, options) {
52
- var newName, ref;
53
- newName = (ref = modifier.$set) != null ? ref.name : void 0;
54
- if (newName && Creator.getCollection("permission_set").findOne({
55
- space: doc.space,
56
- name: newName,
57
- _id: {
58
- $ne: doc._id
59
- }
60
- }, {
61
- fields: {
62
- name: 1
63
- }
64
- })) {
65
- throw new Meteor.Error(500, "API名称不能重复");
66
- }
67
-
68
- var set = modifier.$set || {}
69
- if(_.has(set, 'name') || _.has(set, 'type')){
70
- checkType(set.name || doc.name, set.type || doc.type);
71
- }
72
-
73
- if(_.has(set, 'type') || _.has(set, 'users')){
74
- var type = set.type || doc.type;
75
- var users = set.users || doc.users
76
- if(type === 'profile'){
77
- if(_.has(set, 'users')){
78
- modifier.$set.users = []
79
- }else{
80
- if(!modifier.$unset){
81
- modifier.$unset = {}
82
- }
83
- modifier.$unset.users = 1
84
- }
85
- }
86
- }
87
- var unset = modifier.$unset || {}
88
- if((_.has(set, 'license') && set.license != doc.license)){
89
- throw new Meteor.Error(500, '禁止修改许可证');
90
- // let _type = set.type || doc.type;
91
- // if(_type === 'profile'){
92
- // if(!set.license){
93
- // throw new Meteor.Error(500, "请指定许可证");
94
- // }else{
95
-
96
- // if(_.indexOf(_.pluck(Steedos.getLicenseOptionsSync(doc.space), 'value'), set.license) < 0){
97
- // throw new Meteor.Error(500, "无效的许可证");
98
- // }
99
- // }
100
- // }
101
- }
102
- }
103
- },
104
- "after.update.server.syncSpaceUserProfile": {
105
- on: "server",
106
- when: "after.update",
107
- todo: function(userId, doc, fieldNames, modifier, options){
108
- modifier.$set = modifier.$set || {}
109
- if(doc.type === 'profile' && _.has(modifier.$set, 'name') && modifier.$set.name != this.previous.name){
110
- if(doc.space){
111
- db.space_users.update({space: doc.space, profile: this.previous.name}, {$set: {profile: doc.name}}, {
112
- multi: true
113
- });
114
- }
115
- }
116
- }
117
- },
118
- "before.remove.server.check": {
119
- on: "server",
120
- when: "before.remove",
121
- todo: function (userId, doc) {
122
- var documents, object_collections;
123
- console.log('permission_objects', {permission_set_id: doc._id, space: doc.space});
124
- var pero= Creator.getCollection("permission_objects").find({permission_set_id: doc._id, space: doc.space}, {fields:{_id:1}});
125
- if (pero.count() > 0) {
126
- throw new Meteor.Error(500, `此记录已在对象权限中引用`);
127
- }
128
- }
129
- }
130
- })