@esri/hub-common 14.96.0 → 14.97.0

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.
@@ -113,11 +113,32 @@ export const GroupPermissionPolicies = [
113
113
  authenticated: true,
114
114
  privileges: ["portal:user:shareToGroup"],
115
115
  assertions: [
116
+ // If the group is not view only, any member can share content
116
117
  {
118
+ conditions: [
119
+ {
120
+ property: "entity:isViewOnly",
121
+ type: "eq",
122
+ value: false,
123
+ },
124
+ ],
117
125
  property: "context:currentUser",
118
126
  type: "is-group-member",
119
127
  value: "entity:id",
120
128
  },
129
+ // if the group is view only, only group admins can share content
130
+ {
131
+ conditions: [
132
+ {
133
+ property: "entity:isViewOnly",
134
+ type: "eq",
135
+ value: true,
136
+ },
137
+ ],
138
+ property: "context:currentUser",
139
+ type: "is-group-admin",
140
+ value: "entity:id",
141
+ },
121
142
  ],
122
143
  },
123
144
  {
@@ -1 +1 @@
1
- {"version":3,"file":"GroupBusinessRules.js","sourceRoot":"","sources":["../../../../src/groups/_internal/GroupBusinessRules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GroupBusinessRules.js","sourceRoot":"","sources":["../../../../src/groups/_internal/GroupBusinessRules.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,WAAW;IACX,kBAAkB;IAClB,uBAAuB;IACvB,uBAAuB;IACvB,kBAAkB;IAClB,gBAAgB;IAChB,gBAAgB;IAChB,iBAAiB;IACjB,qBAAqB;IACrB,8BAA8B;IAC9B,+BAA+B;IAC/B,6BAA6B;IAC7B,gCAAgC;IAChC,8BAA8B;IAC9B,mCAAmC;IACnC,6BAA6B;IAC7B,6BAA6B;IAC7B,wBAAwB;IACxB,kBAAkB;CACV,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAwB;IAC1D;QACE,UAAU,EAAE,WAAW;QACvB,QAAQ,EAAE,CAAC,QAAQ,CAAC;KACrB;IACD;QACE,UAAU,EAAE,kBAAkB;QAC9B,YAAY,EAAE,CAAC,WAAW,CAAC;QAC3B,aAAa,EAAE,IAAI;QACnB,UAAU,EAAE,CAAC,yBAAyB,CAAC;QACvC,UAAU,EAAE;YACV;gBACE,QAAQ,EAAE,4BAA4B;gBACtC,IAAI,EAAE,WAAW;gBACjB,KAAK,EAAE,wCAAwC;aAChD;SACF;KACF;IACD;QACE,UAAU,EAAE,uBAAuB;QACnC,YAAY,EAAE,CAAC,kBAAkB,CAAC;KACnC;IACD;QACE,UAAU,EAAE,uBAAuB;QACnC,YAAY,EAAE,CAAC,kBAAkB,CAAC;QAClC,UAAU,EAAE,CAAC,uCAAuC,CAAC;KACtD;IACD;QACE,UAAU,EAAE,gBAAgB;QAC5B,YAAY,EAAE,CAAC,WAAW,CAAC;KAC5B;IACD;QACE,UAAU,EAAE,gBAAgB;QAC5B,YAAY,EAAE,CAAC,WAAW,CAAC;QAC3B,aAAa,EAAE,IAAI;QACnB,UAAU,EAAE,IAAI;KACjB;IACD;QACE,UAAU,EAAE,kBAAkB;QAC9B,YAAY,EAAE,CAAC,WAAW,CAAC;QAC3B,aAAa,EAAE,IAAI;QACnB,WAAW,EAAE,IAAI;KAClB;IACD;QACE,UAAU,EAAE,iBAAiB;QAC7B,YAAY,EAAE,CAAC,WAAW,CAAC;QAC3B,aAAa,EAAE,IAAI;QACnB,WAAW,EAAE,IAAI;KAClB;IACD;QACE,UAAU,EAAE,qBAAqB;QACjC,YAAY,EAAE,CAAC,uBAAuB,CAAC;KACxC;IACD;QACE,UAAU,EAAE,8BAA8B;QAC1C,YAAY,EAAE,CAAC,OAAO,CAAC;QACvB,YAAY,EAAE,CAAC,qBAAqB,EAAE,gBAAgB,CAAC;KACxD;IACD;QACE,UAAU,EAAE,6BAA6B;QACzC,YAAY,EAAE,CAAC,qBAAqB,EAAE,gBAAgB,CAAC;KACxD;IACD;QACE,UAAU,EAAE,gCAAgC;QAC5C,YAAY,EAAE,CAAC,qBAAqB,EAAE,gBAAgB,CAAC;KACxD;IACD;QACE,UAAU,EAAE,8BAA8B;QAC1C,YAAY,EAAE,CAAC,qBAAqB,EAAE,gBAAgB,CAAC;KACxD;IACD;QACE,UAAU,EAAE,6BAA6B;QACzC,YAAY,EAAE,CAAC,qBAAqB,EAAE,gBAAgB,CAAC;KACxD;IACD;QACE,UAAU,EAAE,6BAA6B;QACzC,YAAY,EAAE,CAAC,qBAAqB,EAAE,gBAAgB,CAAC;KACxD;IACD,2EAA2E;IAC3E;QACE,UAAU,EAAE,wBAAwB;QACpC,YAAY,EAAE,CAAC,WAAW,CAAC;QAC3B,aAAa,EAAE,IAAI;QACnB,UAAU,EAAE,CAAC,0BAA0B,CAAC;QACxC,UAAU,EAAE;YACV,8DAA8D;YAC9D;gBACE,UAAU,EAAE;oBACV;wBACE,QAAQ,EAAE,mBAAmB;wBAC7B,IAAI,EAAE,IAAI;wBACV,KAAK,EAAE,KAAK;qBACb;iBACF;gBACD,QAAQ,EAAE,qBAAqB;gBAC/B,IAAI,EAAE,iBAAiB;gBACvB,KAAK,EAAE,WAAW;aACnB;YAED,iEAAiE;YACjE;gBACE,UAAU,EAAE;oBACV;wBACE,QAAQ,EAAE,mBAAmB;wBAC7B,IAAI,EAAE,IAAI;wBACV,KAAK,EAAE,IAAI;qBACZ;iBACF;gBACD,QAAQ,EAAE,qBAAqB;gBAC/B,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE,WAAW;aACnB;SACF;KACF;IACD;QACE,UAAU,EAAE,kBAAkB;QAC9B,YAAY,EAAE,CAAC,gBAAgB,CAAC;KACjC;CACF,CAAC"}
@@ -11,9 +11,21 @@ export function checkAssertions(policy, context, entity) {
11
11
  // Only return a check if the policy is defined
12
12
  if (policy.assertions) {
13
13
  // iterate over the assertions, creating a check for each entry
14
- checks = policy.assertions.map((assertion) => {
15
- return checkAssertion(assertion, entity, context);
16
- });
14
+ checks = policy.assertions.reduce((acc, assertion) => {
15
+ var _a;
16
+ let shouldCheckAssertion = true;
17
+ // if conditions, check them first
18
+ if ((_a = assertion.conditions) === null || _a === void 0 ? void 0 : _a.length) {
19
+ shouldCheckAssertion = assertion.conditions.every((condition) => checkAssertion(condition, entity, context).response === "granted");
20
+ }
21
+ // if we pass all conditions/there are no conditions, we evaluate the assertion
22
+ // otherwise, the assertion is ignored
23
+ if (shouldCheckAssertion) {
24
+ const chk = checkAssertion(assertion, entity, context);
25
+ acc = [...acc, chk];
26
+ }
27
+ return acc;
28
+ }, []);
17
29
  }
18
30
  return checks;
19
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"checkAssertions.js","sourceRoot":"","sources":["../../../../src/permissions/_internal/checkAssertions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAyB,EACzB,OAAuB,EACvB,MAA4B;IAE5B,IAAI,MAAM,GAAG,EAAoB,CAAC;IAClC,+CAA+C;IAC/C,IAAI,MAAM,CAAC,UAAU,EAAE;QACrB,+DAA+D;QAC/D,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAA2B,EAAE,EAAE;YAC7D,OAAO,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;KACJ;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"checkAssertions.js","sourceRoot":"","sources":["../../../../src/permissions/_internal/checkAssertions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAyB,EACzB,OAAuB,EACvB,MAA4B;IAE5B,IAAI,MAAM,GAAG,EAAoB,CAAC;IAClC,+CAA+C;IAC/C,IAAI,MAAM,CAAC,UAAU,EAAE;QACrB,+DAA+D;QAC/D,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAC/B,CAAC,GAAmB,EAAE,SAA2B,EAAE,EAAE;;YACnD,IAAI,oBAAoB,GAAG,IAAI,CAAC;YAEhC,kCAAkC;YAClC,UAAI,SAAS,CAAC,UAAU,0CAAE,MAAM,EAAE;gBAChC,oBAAoB,GAAG,SAAS,CAAC,UAAU,CAAC,KAAK,CAC/C,CAAC,SAA2B,EAAE,EAAE,CAC9B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,KAAK,SAAS,CACpE,CAAC;aACH;YAED,+EAA+E;YAC/E,sCAAsC;YACtC,IAAI,oBAAoB,EAAE;gBACxB,MAAM,GAAG,GAAG,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBACvD,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;aACrB;YAED,OAAO,GAAG,CAAC;QACb,CAAC,EACD,EAAE,CACH,CAAC;KACH;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -116,11 +116,32 @@ exports.GroupPermissionPolicies = [
116
116
  authenticated: true,
117
117
  privileges: ["portal:user:shareToGroup"],
118
118
  assertions: [
119
+ // If the group is not view only, any member can share content
119
120
  {
121
+ conditions: [
122
+ {
123
+ property: "entity:isViewOnly",
124
+ type: "eq",
125
+ value: false,
126
+ },
127
+ ],
120
128
  property: "context:currentUser",
121
129
  type: "is-group-member",
122
130
  value: "entity:id",
123
131
  },
132
+ // if the group is view only, only group admins can share content
133
+ {
134
+ conditions: [
135
+ {
136
+ property: "entity:isViewOnly",
137
+ type: "eq",
138
+ value: true,
139
+ },
140
+ ],
141
+ property: "context:currentUser",
142
+ type: "is-group-admin",
143
+ value: "entity:id",
144
+ },
124
145
  ],
125
146
  },
126
147
  {
@@ -1 +1 @@
1
- {"version":3,"file":"GroupBusinessRules.js","sourceRoot":"","sources":["../../../../src/groups/_internal/GroupBusinessRules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GroupBusinessRules.js","sourceRoot":"","sources":["../../../../src/groups/_internal/GroupBusinessRules.ts"],"names":[],"mappings":"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"}
@@ -14,9 +14,21 @@ function checkAssertions(policy, context, entity) {
14
14
  // Only return a check if the policy is defined
15
15
  if (policy.assertions) {
16
16
  // iterate over the assertions, creating a check for each entry
17
- checks = policy.assertions.map((assertion) => {
18
- return checkAssertion_1.checkAssertion(assertion, entity, context);
19
- });
17
+ checks = policy.assertions.reduce((acc, assertion) => {
18
+ var _a;
19
+ let shouldCheckAssertion = true;
20
+ // if conditions, check them first
21
+ if ((_a = assertion.conditions) === null || _a === void 0 ? void 0 : _a.length) {
22
+ shouldCheckAssertion = assertion.conditions.every((condition) => checkAssertion_1.checkAssertion(condition, entity, context).response === "granted");
23
+ }
24
+ // if we pass all conditions/there are no conditions, we evaluate the assertion
25
+ // otherwise, the assertion is ignored
26
+ if (shouldCheckAssertion) {
27
+ const chk = checkAssertion_1.checkAssertion(assertion, entity, context);
28
+ acc = [...acc, chk];
29
+ }
30
+ return acc;
31
+ }, []);
20
32
  }
21
33
  return checks;
22
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"checkAssertions.js","sourceRoot":"","sources":["../../../../src/permissions/_internal/checkAssertions.ts"],"names":[],"mappings":";;;AAEA,qDAAkD;AAElD;;;;;;GAMG;AACH,SAAgB,eAAe,CAC7B,MAAyB,EACzB,OAAuB,EACvB,MAA4B;IAE5B,IAAI,MAAM,GAAG,EAAoB,CAAC;IAClC,+CAA+C;IAC/C,IAAI,MAAM,CAAC,UAAU,EAAE;QACrB,+DAA+D;QAC/D,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAA2B,EAAE,EAAE;YAC7D,OAAO,+BAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;KACJ;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAfD,0CAeC"}
1
+ {"version":3,"file":"checkAssertions.js","sourceRoot":"","sources":["../../../../src/permissions/_internal/checkAssertions.ts"],"names":[],"mappings":";;;AAEA,qDAAkD;AAElD;;;;;;GAMG;AACH,SAAgB,eAAe,CAC7B,MAAyB,EACzB,OAAuB,EACvB,MAA4B;IAE5B,IAAI,MAAM,GAAG,EAAoB,CAAC;IAClC,+CAA+C;IAC/C,IAAI,MAAM,CAAC,UAAU,EAAE;QACrB,+DAA+D;QAC/D,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAC/B,CAAC,GAAmB,EAAE,SAA2B,EAAE,EAAE;;YACnD,IAAI,oBAAoB,GAAG,IAAI,CAAC;YAEhC,kCAAkC;YAClC,UAAI,SAAS,CAAC,UAAU,0CAAE,MAAM,EAAE;gBAChC,oBAAoB,GAAG,SAAS,CAAC,UAAU,CAAC,KAAK,CAC/C,CAAC,SAA2B,EAAE,EAAE,CAC9B,+BAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,KAAK,SAAS,CACpE,CAAC;aACH;YAED,+EAA+E;YAC/E,sCAAsC;YACtC,IAAI,oBAAoB,EAAE;gBACxB,MAAM,GAAG,GAAG,+BAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBACvD,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;aACrB;YAED,OAAO,GAAG,CAAC;QACb,CAAC,EACD,EAAE,CACH,CAAC;KACH;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAnCD,0CAmCC"}
@@ -98,6 +98,11 @@ export interface IPolicyAssertion {
98
98
  property: string;
99
99
  type: AssertionType;
100
100
  value: any;
101
+ /** A condition dictates if an assertion should be evaluated. If any condition evaluates to false,
102
+ * the assertion should be ignored. If the conditions evaluate to true, or if there are no conditions,
103
+ * the assertion should be evaluated.
104
+ */
105
+ conditions?: IPolicyAssertion[];
101
106
  }
102
107
  /**
103
108
  * Assertion types which define the comparison operation to be performed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@esri/hub-common",
3
- "version": "14.96.0",
3
+ "version": "14.97.0",
4
4
  "description": "Common TypeScript types and utility functions for @esri/hub.js.",
5
5
  "main": "dist/node/index.js",
6
6
  "module": "dist/esm/index.js",