@esri/hub-common 15.37.1 → 15.38.1
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/dist/esm/discussions/api/channels/channels.js +188 -0
- package/dist/esm/discussions/api/channels/channels.js.map +1 -1
- package/dist/esm/discussions/api/index.js +8 -2
- package/dist/esm/discussions/api/index.js.map +1 -1
- package/dist/esm/discussions/api/posts/index.js +2 -0
- package/dist/esm/discussions/api/posts/index.js.map +1 -0
- package/dist/esm/discussions/api/posts/posts.js +225 -0
- package/dist/esm/discussions/api/posts/posts.js.map +1 -0
- package/dist/esm/discussions/api/reactions/index.js +2 -0
- package/dist/esm/discussions/api/reactions/index.js.map +1 -0
- package/dist/esm/discussions/api/reactions/reactions.js +53 -0
- package/dist/esm/discussions/api/reactions/reactions.js.map +1 -0
- package/dist/esm/discussions/api/utils/channel-permission.js +359 -0
- package/dist/esm/discussions/api/utils/channel-permission.js.map +1 -0
- package/dist/esm/discussions/api/utils/channels/can-create-channel-v2.js +13 -0
- package/dist/esm/discussions/api/utils/channels/can-create-channel-v2.js.map +1 -0
- package/dist/esm/discussions/api/utils/channels/can-create-channel.js +54 -0
- package/dist/esm/discussions/api/utils/channels/can-create-channel.js.map +1 -0
- package/dist/esm/discussions/api/utils/channels/can-delete-channel-v2.js +17 -0
- package/dist/esm/discussions/api/utils/channels/can-delete-channel-v2.js.map +1 -0
- package/dist/esm/discussions/api/utils/channels/can-delete-channel.js +17 -0
- package/dist/esm/discussions/api/utils/channels/can-delete-channel.js.map +1 -0
- package/dist/esm/discussions/api/utils/channels/can-edit-channel-v2.js +19 -0
- package/dist/esm/discussions/api/utils/channels/can-edit-channel-v2.js.map +1 -0
- package/dist/esm/discussions/api/utils/channels/can-edit-channel.js +17 -0
- package/dist/esm/discussions/api/utils/channels/can-edit-channel.js.map +1 -0
- package/dist/esm/discussions/api/utils/channels/can-modify-channel.js +18 -0
- package/dist/esm/discussions/api/utils/channels/can-modify-channel.js.map +1 -0
- package/dist/esm/discussions/api/utils/channels/can-post-to-channel.js +57 -0
- package/dist/esm/discussions/api/utils/channels/can-post-to-channel.js.map +1 -0
- package/dist/esm/discussions/api/utils/channels/can-read-channel-v2.js +18 -0
- package/dist/esm/discussions/api/utils/channels/can-read-channel-v2.js.map +1 -0
- package/dist/esm/discussions/api/utils/channels/can-read-channel.js +52 -0
- package/dist/esm/discussions/api/utils/channels/can-read-channel.js.map +1 -0
- package/dist/esm/discussions/api/utils/channels/channel-to-dto-map.js +11 -0
- package/dist/esm/discussions/api/utils/channels/channel-to-dto-map.js.map +1 -0
- package/dist/esm/discussions/api/utils/channels/index.js +13 -0
- package/dist/esm/discussions/api/utils/channels/index.js.map +1 -0
- package/dist/esm/discussions/api/utils/channels/is-authorized-to-modify-channel-by-legacy-permissions.js +44 -0
- package/dist/esm/discussions/api/utils/channels/is-authorized-to-modify-channel-by-legacy-permissions.js.map +1 -0
- package/dist/esm/discussions/api/utils/platform.js +44 -0
- package/dist/esm/discussions/api/utils/platform.js.map +1 -0
- package/dist/esm/discussions/api/utils/portal-privilege.js +35 -0
- package/dist/esm/discussions/api/utils/portal-privilege.js.map +1 -0
- package/dist/esm/discussions/api/utils/posts/can-create-post-v2.js +20 -0
- package/dist/esm/discussions/api/utils/posts/can-create-post-v2.js.map +1 -0
- package/dist/esm/discussions/api/utils/posts/can-create-post.js +52 -0
- package/dist/esm/discussions/api/utils/posts/can-create-post.js.map +1 -0
- package/dist/esm/discussions/api/utils/posts/can-create-reply-v2.js +19 -0
- package/dist/esm/discussions/api/utils/posts/can-create-reply-v2.js.map +1 -0
- package/dist/esm/discussions/api/utils/posts/can-create-reply.js +52 -0
- package/dist/esm/discussions/api/utils/posts/can-create-reply.js.map +1 -0
- package/dist/esm/discussions/api/utils/posts/can-delete-post-v2.js +24 -0
- package/dist/esm/discussions/api/utils/posts/can-delete-post-v2.js.map +1 -0
- package/dist/esm/discussions/api/utils/posts/can-delete-post.js +28 -0
- package/dist/esm/discussions/api/utils/posts/can-delete-post.js.map +1 -0
- package/dist/esm/discussions/api/utils/posts/can-edit-post-status-v2.js +16 -0
- package/dist/esm/discussions/api/utils/posts/can-edit-post-status-v2.js.map +1 -0
- package/dist/esm/discussions/api/utils/posts/can-edit-post-status.js +61 -0
- package/dist/esm/discussions/api/utils/posts/can-edit-post-status.js.map +1 -0
- package/dist/esm/discussions/api/utils/posts/can-edit-post-v2.js +19 -0
- package/dist/esm/discussions/api/utils/posts/can-edit-post-v2.js.map +1 -0
- package/dist/esm/discussions/api/utils/posts/can-edit-post.js +62 -0
- package/dist/esm/discussions/api/utils/posts/can-edit-post.js.map +1 -0
- package/dist/esm/discussions/api/utils/posts/index.js +15 -0
- package/dist/esm/discussions/api/utils/posts/index.js.map +1 -0
- package/dist/esm/discussions/api/utils/posts/parse-discussion-uri.js +38 -0
- package/dist/esm/discussions/api/utils/posts/parse-discussion-uri.js.map +1 -0
- package/dist/esm/discussions/api/utils/posts/parse-mentioned-users.js +19 -0
- package/dist/esm/discussions/api/utils/posts/parse-mentioned-users.js.map +1 -0
- package/dist/esm/discussions/api/utils/reactions/can-create-reaction-v2.js +27 -0
- package/dist/esm/discussions/api/utils/reactions/can-create-reaction-v2.js.map +1 -0
- package/dist/esm/discussions/api/utils/reactions/can-create-reaction.js +28 -0
- package/dist/esm/discussions/api/utils/reactions/can-create-reaction.js.map +1 -0
- package/dist/esm/discussions/api/utils/reactions/index.js +3 -0
- package/dist/esm/discussions/api/utils/reactions/index.js.map +1 -0
- package/dist/esm/discussions/constants.js +1 -0
- package/dist/esm/discussions/constants.js.map +1 -1
- package/dist/esm/search/Catalog.js +4 -1
- package/dist/esm/search/Catalog.js.map +1 -1
- package/dist/node/discussions/api/channels/channels.js +205 -1
- package/dist/node/discussions/api/channels/channels.js.map +1 -1
- package/dist/node/discussions/api/index.js +8 -2
- package/dist/node/discussions/api/index.js.map +1 -1
- package/dist/node/discussions/api/posts/index.js +5 -0
- package/dist/node/discussions/api/posts/index.js.map +1 -0
- package/dist/node/discussions/api/posts/posts.js +244 -0
- package/dist/node/discussions/api/posts/posts.js.map +1 -0
- package/dist/node/discussions/api/reactions/index.js +5 -0
- package/dist/node/discussions/api/reactions/index.js.map +1 -0
- package/dist/node/discussions/api/reactions/reactions.js +60 -0
- package/dist/node/discussions/api/reactions/reactions.js.map +1 -0
- package/dist/node/discussions/api/utils/channel-permission.js +363 -0
- package/dist/node/discussions/api/utils/channel-permission.js.map +1 -0
- package/dist/node/discussions/api/utils/channels/can-create-channel-v2.js +17 -0
- package/dist/node/discussions/api/utils/channels/can-create-channel-v2.js.map +1 -0
- package/dist/node/discussions/api/utils/channels/can-create-channel.js +58 -0
- package/dist/node/discussions/api/utils/channels/can-create-channel.js.map +1 -0
- package/dist/node/discussions/api/utils/channels/can-delete-channel-v2.js +21 -0
- package/dist/node/discussions/api/utils/channels/can-delete-channel-v2.js.map +1 -0
- package/dist/node/discussions/api/utils/channels/can-delete-channel.js +21 -0
- package/dist/node/discussions/api/utils/channels/can-delete-channel.js.map +1 -0
- package/dist/node/discussions/api/utils/channels/can-edit-channel-v2.js +23 -0
- package/dist/node/discussions/api/utils/channels/can-edit-channel-v2.js.map +1 -0
- package/dist/node/discussions/api/utils/channels/can-edit-channel.js +21 -0
- package/dist/node/discussions/api/utils/channels/can-edit-channel.js.map +1 -0
- package/dist/node/discussions/api/utils/channels/can-modify-channel.js +22 -0
- package/dist/node/discussions/api/utils/channels/can-modify-channel.js.map +1 -0
- package/dist/node/discussions/api/utils/channels/can-post-to-channel.js +61 -0
- package/dist/node/discussions/api/utils/channels/can-post-to-channel.js.map +1 -0
- package/dist/node/discussions/api/utils/channels/can-read-channel-v2.js +22 -0
- package/dist/node/discussions/api/utils/channels/can-read-channel-v2.js.map +1 -0
- package/dist/node/discussions/api/utils/channels/can-read-channel.js +57 -0
- package/dist/node/discussions/api/utils/channels/can-read-channel.js.map +1 -0
- package/dist/node/discussions/api/utils/channels/channel-to-dto-map.js +15 -0
- package/dist/node/discussions/api/utils/channels/channel-to-dto-map.js.map +1 -0
- package/dist/node/discussions/api/utils/channels/index.js +26 -0
- package/dist/node/discussions/api/utils/channels/index.js.map +1 -0
- package/dist/node/discussions/api/utils/channels/is-authorized-to-modify-channel-by-legacy-permissions.js +48 -0
- package/dist/node/discussions/api/utils/channels/is-authorized-to-modify-channel-by-legacy-permissions.js.map +1 -0
- package/dist/node/discussions/api/utils/platform.js +53 -0
- package/dist/node/discussions/api/utils/platform.js.map +1 -0
- package/dist/node/discussions/api/utils/portal-privilege.js +41 -0
- package/dist/node/discussions/api/utils/portal-privilege.js.map +1 -0
- package/dist/node/discussions/api/utils/posts/can-create-post-v2.js +24 -0
- package/dist/node/discussions/api/utils/posts/can-create-post-v2.js.map +1 -0
- package/dist/node/discussions/api/utils/posts/can-create-post.js +56 -0
- package/dist/node/discussions/api/utils/posts/can-create-post.js.map +1 -0
- package/dist/node/discussions/api/utils/posts/can-create-reply-v2.js +23 -0
- package/dist/node/discussions/api/utils/posts/can-create-reply-v2.js.map +1 -0
- package/dist/node/discussions/api/utils/posts/can-create-reply.js +56 -0
- package/dist/node/discussions/api/utils/posts/can-create-reply.js.map +1 -0
- package/dist/node/discussions/api/utils/posts/can-delete-post-v2.js +28 -0
- package/dist/node/discussions/api/utils/posts/can-delete-post-v2.js.map +1 -0
- package/dist/node/discussions/api/utils/posts/can-delete-post.js +32 -0
- package/dist/node/discussions/api/utils/posts/can-delete-post.js.map +1 -0
- package/dist/node/discussions/api/utils/posts/can-edit-post-status-v2.js +20 -0
- package/dist/node/discussions/api/utils/posts/can-edit-post-status-v2.js.map +1 -0
- package/dist/node/discussions/api/utils/posts/can-edit-post-status.js +66 -0
- package/dist/node/discussions/api/utils/posts/can-edit-post-status.js.map +1 -0
- package/dist/node/discussions/api/utils/posts/can-edit-post-v2.js +23 -0
- package/dist/node/discussions/api/utils/posts/can-edit-post-v2.js.map +1 -0
- package/dist/node/discussions/api/utils/posts/can-edit-post.js +67 -0
- package/dist/node/discussions/api/utils/posts/can-edit-post.js.map +1 -0
- package/dist/node/discussions/api/utils/posts/index.js +31 -0
- package/dist/node/discussions/api/utils/posts/index.js.map +1 -0
- package/dist/node/discussions/api/utils/posts/parse-discussion-uri.js +42 -0
- package/dist/node/discussions/api/utils/posts/parse-discussion-uri.js.map +1 -0
- package/dist/node/discussions/api/utils/posts/parse-mentioned-users.js +23 -0
- package/dist/node/discussions/api/utils/posts/parse-mentioned-users.js.map +1 -0
- package/dist/node/discussions/api/utils/reactions/can-create-reaction-v2.js +31 -0
- package/dist/node/discussions/api/utils/reactions/can-create-reaction-v2.js.map +1 -0
- package/dist/node/discussions/api/utils/reactions/can-create-reaction.js +32 -0
- package/dist/node/discussions/api/utils/reactions/can-create-reaction.js.map +1 -0
- package/dist/node/discussions/api/utils/reactions/index.js +7 -0
- package/dist/node/discussions/api/utils/reactions/index.js.map +1 -0
- package/dist/node/discussions/constants.js +2 -1
- package/dist/node/discussions/constants.js.map +1 -1
- package/dist/node/search/Catalog.js +4 -1
- package/dist/node/search/Catalog.js.map +1 -1
- package/dist/types/discussions/api/channels/channels.d.ts +140 -1
- package/dist/types/discussions/api/index.d.ts +8 -2
- package/dist/types/discussions/api/posts/index.d.ts +1 -0
- package/dist/types/discussions/api/posts/posts.d.ts +146 -0
- package/dist/types/discussions/api/reactions/index.d.ts +1 -0
- package/dist/types/discussions/api/reactions/reactions.d.ts +38 -0
- package/dist/types/discussions/api/utils/channel-permission.d.ts +39 -0
- package/dist/types/discussions/api/utils/channels/can-create-channel-v2.d.ts +10 -0
- package/dist/types/discussions/api/utils/channels/can-create-channel.d.ts +11 -0
- package/dist/types/discussions/api/utils/channels/can-delete-channel-v2.d.ts +10 -0
- package/dist/types/discussions/api/utils/channels/can-delete-channel.d.ts +11 -0
- package/dist/types/discussions/api/utils/channels/can-edit-channel-v2.d.ts +11 -0
- package/dist/types/discussions/api/utils/channels/can-edit-channel.d.ts +11 -0
- package/dist/types/discussions/api/utils/channels/can-modify-channel.d.ts +11 -0
- package/dist/types/discussions/api/utils/channels/can-post-to-channel.d.ts +11 -0
- package/dist/types/discussions/api/utils/channels/can-read-channel-v2.d.ts +11 -0
- package/dist/types/discussions/api/utils/channels/can-read-channel.d.ts +22 -0
- package/dist/types/discussions/api/utils/channels/channel-to-dto-map.d.ts +6 -0
- package/dist/types/discussions/api/utils/channels/index.d.ts +10 -0
- package/dist/types/discussions/api/utils/channels/is-authorized-to-modify-channel-by-legacy-permissions.d.ts +11 -0
- package/dist/types/discussions/api/utils/platform.d.ts +26 -0
- package/dist/types/discussions/api/utils/portal-privilege.d.ts +17 -0
- package/dist/types/discussions/api/utils/posts/can-create-post-v2.d.ts +10 -0
- package/dist/types/discussions/api/utils/posts/can-create-post.d.ts +12 -0
- package/dist/types/discussions/api/utils/posts/can-create-reply-v2.d.ts +9 -0
- package/dist/types/discussions/api/utils/posts/can-create-reply.d.ts +12 -0
- package/dist/types/discussions/api/utils/posts/can-delete-post-v2.d.ts +11 -0
- package/dist/types/discussions/api/utils/posts/can-delete-post.d.ts +12 -0
- package/dist/types/discussions/api/utils/posts/can-edit-post-status-v2.d.ts +9 -0
- package/dist/types/discussions/api/utils/posts/can-edit-post-status.d.ts +20 -0
- package/dist/types/discussions/api/utils/posts/can-edit-post-v2.d.ts +10 -0
- package/dist/types/discussions/api/utils/posts/can-edit-post.d.ts +22 -0
- package/dist/types/discussions/api/utils/posts/index.d.ts +12 -0
- package/dist/types/discussions/api/utils/posts/parse-discussion-uri.d.ts +9 -0
- package/dist/types/discussions/api/utils/posts/parse-mentioned-users.d.ts +6 -0
- package/dist/types/discussions/api/utils/reactions/can-create-reaction-v2.d.ts +12 -0
- package/dist/types/discussions/api/utils/reactions/can-create-reaction.d.ts +13 -0
- package/dist/types/discussions/api/utils/reactions/index.d.ts +2 -0
- package/dist/types/discussions/constants.d.ts +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ChannelPermission } from "../channel-permission";
|
|
2
|
+
import { hasOrgAdminViewRights } from "../portal-privilege";
|
|
3
|
+
/**
|
|
4
|
+
* Utility to determine if User can view channel posts and channel attributes
|
|
5
|
+
*
|
|
6
|
+
* @export
|
|
7
|
+
* @param {IChannel} channel
|
|
8
|
+
* @param {IUser} user
|
|
9
|
+
* @return {*} {boolean}
|
|
10
|
+
*/
|
|
11
|
+
export function canReadChannelV2(channel, user = {}) {
|
|
12
|
+
if (hasOrgAdminViewRights(user, channel.orgId)) {
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
const channelPermission = new ChannelPermission(channel);
|
|
16
|
+
return channelPermission.canReadChannel(user);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=can-read-channel-v2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"can-read-channel-v2.js","sourceRoot":"","sources":["../../../../../../src/discussions/api/utils/channels/can-read-channel-v2.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAiB,EACjB,OAAiC,EAAE;IAEnC,IAAI,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;QAC9C,OAAO,IAAI,CAAC;KACb;IAED,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACzD,OAAO,iBAAiB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { reduceByGroupMembership } from "../platform";
|
|
2
|
+
import { hasOrgAdminViewRights } from "../portal-privilege";
|
|
3
|
+
/**
|
|
4
|
+
* Utility to determine if User can view channel posts and channel attributes
|
|
5
|
+
*
|
|
6
|
+
* @deprecated replace with canReadChannelV2 for v2 discussions
|
|
7
|
+
* @export
|
|
8
|
+
* @param {IChannel} channel
|
|
9
|
+
* @param {IUser} user
|
|
10
|
+
* @return {*} {boolean}
|
|
11
|
+
*/
|
|
12
|
+
export function canReadChannel(channel, user = {}) {
|
|
13
|
+
if (hasOrgAdminViewRights(user, channel.orgId)) {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
if (channel.access === "private") {
|
|
17
|
+
// ensure user is member of at least one group
|
|
18
|
+
return intersectGroups(["member", "owner", "admin"])(user, channel);
|
|
19
|
+
}
|
|
20
|
+
if (channel.access === "org") {
|
|
21
|
+
return (intersectGroups(["member", "owner", "admin"])(user, channel) ||
|
|
22
|
+
isLegacyChannelOrgMember(channel, user));
|
|
23
|
+
}
|
|
24
|
+
// public channel
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Utility (deprecated) to determine whether User can view posts belonging to Channel
|
|
29
|
+
*
|
|
30
|
+
* @export
|
|
31
|
+
* @deprecated replace with canReadChannelV2 for v2 discussions
|
|
32
|
+
* @param {IChannel} channel
|
|
33
|
+
* @param {IUser} user
|
|
34
|
+
* @return {*} {boolean}
|
|
35
|
+
*/
|
|
36
|
+
export function canReadFromChannel(channel, user = {}) {
|
|
37
|
+
return canReadChannel(channel, user);
|
|
38
|
+
}
|
|
39
|
+
function intersectGroups(membershipTypes) {
|
|
40
|
+
return (user, channel) => {
|
|
41
|
+
const { groups: sharedGroups = [] } = channel;
|
|
42
|
+
const { groups: userGroups = [] } = user;
|
|
43
|
+
const eligibleUserGroups = userGroups.reduce(reduceByGroupMembership(membershipTypes), []);
|
|
44
|
+
const method = "some";
|
|
45
|
+
return sharedGroups[method]((group) => eligibleUserGroups.indexOf(group) > -1);
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function isLegacyChannelOrgMember(channel, user) {
|
|
49
|
+
// orgs.length = 1 until collaboration/discussion between many orgs is ideated
|
|
50
|
+
return channel.orgs.length === 1 && channel.orgs.indexOf(user.orgId) > -1;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=can-read-channel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"can-read-channel.js","sourceRoot":"","sources":["../../../../../../src/discussions/api/utils/channels/can-read-channel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAiB,EACjB,OAAiC,EAAE;IAEnC,IAAI,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;QAC9C,OAAO,IAAI,CAAC;KACb;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE;QAChC,8CAA8C;QAC9C,OAAO,eAAe,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;KACrE;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE;QAC5B,OAAO,CACL,eAAe,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC;YAC5D,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,CACxC,CAAC;KACH;IAED,iBAAiB;IACjB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAiB,EACjB,OAAiC,EAAE;IAEnC,OAAO,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,eAAe,CACtB,eAAkC;IAElC,OAAO,CAAC,IAA8B,EAAE,OAAiB,EAAW,EAAE;QACpE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;QAC9C,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;QACzC,MAAM,kBAAkB,GAAG,UAAU,CAAC,MAAM,CAC1C,uBAAuB,CAAC,eAAe,CAAC,EACxC,EAAE,CACH,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,CAAC;QACtB,OAAO,YAAY,CAAC,MAAM,CAAC,CACzB,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAClD,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAC/B,OAAiB,EACjB,IAA8B;IAE9B,8EAA8E;IAC9E,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5E,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// TODO: V2 use IUpdateChannel as param type when hoisted to hub.js from service
|
|
2
|
+
import { __rest } from "tslib";
|
|
3
|
+
/**
|
|
4
|
+
* @hidden
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export function dtoToChannel(dto) {
|
|
8
|
+
const { channelAclDefinition } = dto, rest = __rest(dto, ["channelAclDefinition"]);
|
|
9
|
+
return Object.assign(Object.assign({}, rest), { channelAcl: channelAclDefinition });
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=channel-to-dto-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-to-dto-map.js","sourceRoot":"","sources":["../../../../../../src/discussions/api/utils/channels/channel-to-dto-map.ts"],"names":[],"mappings":"AAAA,gFAAgF;;AAIhF;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,GAAQ;IACnC,MAAM,EAAE,oBAAoB,KAAc,GAAG,EAAZ,IAAI,UAAK,GAAG,EAAvC,wBAAiC,CAAM,CAAC;IAE9C,uCACK,IAAI,KACP,UAAU,EAAE,oBAAoB,IAChC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// V1
|
|
2
|
+
export { canCreateChannel } from "./can-create-channel";
|
|
3
|
+
export { canDeleteChannel } from "./can-delete-channel";
|
|
4
|
+
export { canEditChannel } from "./can-edit-channel";
|
|
5
|
+
export { canModifyChannel } from "./can-modify-channel";
|
|
6
|
+
export { canPostToChannel } from "./can-post-to-channel";
|
|
7
|
+
export { canReadChannel, canReadFromChannel } from "./can-read-channel";
|
|
8
|
+
// V2
|
|
9
|
+
export { canCreateChannelV2 } from "./can-create-channel-v2";
|
|
10
|
+
export { canDeleteChannelV2 } from "./can-delete-channel-v2";
|
|
11
|
+
export { canEditChannelV2 } from "./can-edit-channel-v2";
|
|
12
|
+
export { canReadChannelV2 } from "./can-read-channel-v2";
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/discussions/api/utils/channels/index.ts"],"names":[],"mappings":"AAAA,KAAK;AACL,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExE,KAAK;AACL,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { isOrgAdmin } from "../platform";
|
|
2
|
+
import { SharingAccess } from "../../types";
|
|
3
|
+
const AGO_ADMIN_GROUP_ROLES = Object.freeze(["owner", "admin"]);
|
|
4
|
+
/**
|
|
5
|
+
* Utility to determine if User has privileges to modify a channel by legacy channel permissions
|
|
6
|
+
* @param channel
|
|
7
|
+
* @param user
|
|
8
|
+
* @returns {boolean}
|
|
9
|
+
* @internal
|
|
10
|
+
* @hidden
|
|
11
|
+
*/
|
|
12
|
+
export function isAuthorizedToModifyChannelByLegacyPermissions(user = {}, channel) {
|
|
13
|
+
const { username, groups: userGroups = [] } = user;
|
|
14
|
+
const { access, groups: channelGroups = [], orgs: channelOrgs = [], creator: channelCreator, } = channel;
|
|
15
|
+
// ensure authenticated
|
|
16
|
+
if (!username) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
if (username === channelCreator) {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
if (access === SharingAccess.PRIVATE) {
|
|
23
|
+
return isAuthorizedToModifyChannelByLegacyGroup(channelGroups, userGroups);
|
|
24
|
+
}
|
|
25
|
+
// public or org access
|
|
26
|
+
return (isAuthorizedToModifyChannelByLegacyGroup(channelGroups, userGroups) ||
|
|
27
|
+
isLegacyChannelOrgAdmin(channelOrgs, user));
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Ensure the user is an owner/admin of one of the channel groups
|
|
31
|
+
*/
|
|
32
|
+
function isAuthorizedToModifyChannelByLegacyGroup(channelGroups, userGroups) {
|
|
33
|
+
return channelGroups.some((channelGroupId) => {
|
|
34
|
+
return userGroups.some((group) => {
|
|
35
|
+
const { id: userGroupId, userMembership: { memberType: userMemberType }, } = group;
|
|
36
|
+
return (channelGroupId === userGroupId &&
|
|
37
|
+
AGO_ADMIN_GROUP_ROLES.includes(userMemberType));
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
function isLegacyChannelOrgAdmin(channelOrgs, user) {
|
|
42
|
+
return isOrgAdmin(user) && channelOrgs.includes(user.orgId);
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=is-authorized-to-modify-channel-by-legacy-permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-authorized-to-modify-channel-by-legacy-permissions.js","sourceRoot":"","sources":["../../../../../../src/discussions/api/utils/channels/is-authorized-to-modify-channel-by-legacy-permissions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAA8B,aAAa,EAAE,MAAM,aAAa,CAAC;AAExE,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAEhE;;;;;;;GAOG;AACH,MAAM,UAAU,8CAA8C,CAC5D,OAAiC,EAAE,EACnC,OAAiB;IAEjB,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;IACnD,MAAM,EACJ,MAAM,EACN,MAAM,EAAE,aAAa,GAAG,EAAE,EAC1B,IAAI,EAAE,WAAW,GAAG,EAAE,EACtB,OAAO,EAAE,cAAc,GACxB,GAAG,OAAO,CAAC;IAEZ,uBAAuB;IACvB,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,KAAK,CAAC;KACd;IAED,IAAI,QAAQ,KAAK,cAAc,EAAE;QAC/B,OAAO,IAAI,CAAC;KACb;IAED,IAAI,MAAM,KAAK,aAAa,CAAC,OAAO,EAAE;QACpC,OAAO,wCAAwC,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;KAC5E;IAED,uBAAuB;IACvB,OAAO,CACL,wCAAwC,CAAC,aAAa,EAAE,UAAU,CAAC;QACnE,uBAAuB,CAAC,WAAW,EAAE,IAAI,CAAC,CAC3C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,wCAAwC,CAC/C,aAAuB,EACvB,UAAoB;IAEpB,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,cAAsB,EAAE,EAAE;QACnD,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,KAAa,EAAE,EAAE;YACvC,MAAM,EACJ,EAAE,EAAE,WAAW,EACf,cAAc,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,GAC/C,GAAG,KAAK,CAAC;YAEV,OAAO,CACL,cAAc,KAAK,WAAW;gBAC9B,qBAAqB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAC/C,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,uBAAuB,CAC9B,WAAqB,EACrB,IAA8B;IAE9B,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility that returns reducer function that filters a user's groups
|
|
3
|
+
* by membership type and produces an array of group id's
|
|
4
|
+
*
|
|
5
|
+
*
|
|
6
|
+
* @export
|
|
7
|
+
* @param {GroupMembership[]} membershipTypes
|
|
8
|
+
* @return {*} {((memo: string[], group: IGroup) => string[])}
|
|
9
|
+
*/
|
|
10
|
+
export function reduceByGroupMembership(membershipTypes) {
|
|
11
|
+
return function (memo, group) {
|
|
12
|
+
if (membershipTypes.indexOf(group.userMembership.memberType) > -1) {
|
|
13
|
+
memo.push(group.id);
|
|
14
|
+
}
|
|
15
|
+
return memo;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Utility that checks if a user is a portal org admin, or an org_admin by a platform role
|
|
20
|
+
*
|
|
21
|
+
* @export
|
|
22
|
+
* @param {IUser} user
|
|
23
|
+
* @return {*} {boolean}
|
|
24
|
+
*/
|
|
25
|
+
// NOTE: this is not the same as @esri/arcgis-rest-portal isOrgAdmin,
|
|
26
|
+
// which first resolves `user` from `IUserRequestOptions` to make this determination
|
|
27
|
+
// https://github.com/Esri/arcgis-rest-js/blob/7ab072184f89dcb35367518101ee4abeb5a9d112/packages/arcgis-rest-portal/src/sharing/helpers.ts#L45
|
|
28
|
+
export function isOrgAdmin(user) {
|
|
29
|
+
return user.role === "org_admin";
|
|
30
|
+
}
|
|
31
|
+
export function isUserInOrg(user = {}, orgId) {
|
|
32
|
+
return user.orgId === orgId;
|
|
33
|
+
}
|
|
34
|
+
export function isOrgAdminInOrg(user, orgId) {
|
|
35
|
+
return isOrgAdmin(user) && isUserInOrg(user, orgId);
|
|
36
|
+
}
|
|
37
|
+
export function userHasPrivilege(user = {}, privilege) {
|
|
38
|
+
var _a;
|
|
39
|
+
return !!((_a = user.privileges) === null || _a === void 0 ? void 0 : _a.includes(privilege));
|
|
40
|
+
}
|
|
41
|
+
export function userHasPrivileges(user = {}, privileges) {
|
|
42
|
+
return privileges.every((privilege) => userHasPrivilege(user, privilege));
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../../../../src/discussions/api/utils/platform.ts"],"names":[],"mappings":"AAeA;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACrC,eAAkC;IAElC,OAAO,UAAU,IAAI,EAAE,KAAK;QAC1B,IAAI,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;YACjE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;SACrB;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,qEAAqE;AACrE,oFAAoF;AACpF,8IAA8I;AAC9I,MAAM,UAAU,UAAU,CAAC,IAAW;IACpC,OAAO,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,OAAiC,EAAE,EACnC,KAAa;IAEb,OAAO,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAW,EAAE,KAAa;IACxD,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,OAAiC,EAAE,EACnC,SAAoB;;IAEpB,OAAO,CAAC,QAAC,IAAI,CAAC,UAAU,0CAAE,QAAQ,CAAC,SAAS,EAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,OAAiC,EAAE,EACnC,UAAuB;IAEvB,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;AAC5E,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { isOrgAdminInOrg, isUserInOrg, userHasPrivileges } from "./platform";
|
|
2
|
+
/**
|
|
3
|
+
* @internal
|
|
4
|
+
* @hidden
|
|
5
|
+
*/
|
|
6
|
+
export function hasOrgAdminViewRights(user = {}, orgId) {
|
|
7
|
+
return (isOrgAdminInOrg(user, orgId) ||
|
|
8
|
+
(isUserInOrg(user, orgId) &&
|
|
9
|
+
userHasPrivileges(user, ["portal:admin:viewItems"])));
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* @internal
|
|
13
|
+
* @hidden
|
|
14
|
+
*/
|
|
15
|
+
export function hasOrgAdminUpdateRights(user = {}, orgId) {
|
|
16
|
+
return (isOrgAdminInOrg(user, orgId) ||
|
|
17
|
+
(isUserInOrg(user, orgId) &&
|
|
18
|
+
userHasPrivileges(user, [
|
|
19
|
+
"portal:admin:viewItems",
|
|
20
|
+
"portal:admin:updateItems",
|
|
21
|
+
])));
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* @internal
|
|
25
|
+
* @hidden
|
|
26
|
+
*/
|
|
27
|
+
export function hasOrgAdminDeleteRights(user = {}, orgId) {
|
|
28
|
+
return (isOrgAdminInOrg(user, orgId) ||
|
|
29
|
+
(isUserInOrg(user, orgId) &&
|
|
30
|
+
userHasPrivileges(user, [
|
|
31
|
+
"portal:admin:viewItems",
|
|
32
|
+
"portal:admin:deleteItems",
|
|
33
|
+
])));
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=portal-privilege.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portal-privilege.js","sourceRoot":"","sources":["../../../../../src/discussions/api/utils/portal-privilege.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG7E;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAiC,EAAE,EACnC,KAAa;IAEb,OAAO,CACL,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC;QAC5B,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC;YACvB,iBAAiB,CAAC,IAAI,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC,CACvD,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAiC,EAAE,EACnC,KAAa;IAEb,OAAO,CACL,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC;QAC5B,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC;YACvB,iBAAiB,CAAC,IAAI,EAAE;gBACtB,wBAAwB;gBACxB,0BAA0B;aAC3B,CAAC,CAAC,CACN,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAiC,EAAE,EACnC,KAAa;IAEb,OAAO,CACL,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC;QAC5B,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC;YACvB,iBAAiB,CAAC,IAAI,EAAE;gBACtB,wBAAwB;gBACxB,0BAA0B;aAC3B,CAAC,CAAC,CACN,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ChannelPermission } from "../channel-permission";
|
|
2
|
+
import { hasOrgAdminUpdateRights } from "../portal-privilege";
|
|
3
|
+
/**
|
|
4
|
+
* Utility to determine if User has privileges to create a post in a channel
|
|
5
|
+
* @export
|
|
6
|
+
* @param channel
|
|
7
|
+
* @param user
|
|
8
|
+
* @returns {boolean}
|
|
9
|
+
*/
|
|
10
|
+
export function canCreatePostV2(channel, user = {}) {
|
|
11
|
+
if (hasOrgAdminUpdateRights(user, channel.orgId)) {
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
if (!channel.allowPost) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
const channelPermission = new ChannelPermission(channel);
|
|
18
|
+
return channelPermission.canPostToChannel(user);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=can-create-post-v2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"can-create-post-v2.js","sourceRoot":"","sources":["../../../../../../src/discussions/api/utils/posts/can-create-post-v2.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAiB,EACjB,OAAiC,EAAE;IAEnC,IAAI,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;QAChD,OAAO,IAAI,CAAC;KACb;IAED,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;QACtB,OAAO,KAAK,CAAC;KACd;IAED,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACzD,OAAO,iBAAiB,CAAC,gBAAgB,CAAC,IAAwB,CAAC,CAAC;AACtE,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { SharingAccess } from "../../types";
|
|
2
|
+
import { hasOrgAdminUpdateRights } from "../portal-privilege";
|
|
3
|
+
import { CANNOT_DISCUSS } from "../../../constants";
|
|
4
|
+
const ALLOWED_GROUP_ROLES = Object.freeze(["owner", "admin", "member"]);
|
|
5
|
+
/**
|
|
6
|
+
* Utility to determine if User has privileges to create a post in a channel
|
|
7
|
+
*
|
|
8
|
+
* @deprecated replace with canCreatePostV2 for v2 discussions
|
|
9
|
+
* @export
|
|
10
|
+
* @param channel
|
|
11
|
+
* @param user
|
|
12
|
+
* @returns {boolean}
|
|
13
|
+
*/
|
|
14
|
+
export function canCreatePost(channel, user = {}) {
|
|
15
|
+
const { access, groups, orgs } = channel;
|
|
16
|
+
if (hasOrgAdminUpdateRights(user, channel.orgId)) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
return isAuthorizedToPostByLegacyPermissions(user, {
|
|
20
|
+
access,
|
|
21
|
+
groups,
|
|
22
|
+
orgs,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
function isAuthorizedToPostByLegacyPermissions(user, channelParams) {
|
|
26
|
+
const { username, groups: userGroups, orgId: userOrgId } = user;
|
|
27
|
+
const { access, groups, orgs } = channelParams;
|
|
28
|
+
if (!username) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
if (access === SharingAccess.PUBLIC) {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
if (access === SharingAccess.PRIVATE) {
|
|
35
|
+
return isAuthorizedToPostByLegacyGroup(groups, userGroups);
|
|
36
|
+
}
|
|
37
|
+
if (access === SharingAccess.ORG) {
|
|
38
|
+
return orgs.includes(userOrgId);
|
|
39
|
+
}
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
function isAuthorizedToPostByLegacyGroup(channelGroups = [], userGroups = []) {
|
|
43
|
+
return channelGroups.some((channelGroupId) => {
|
|
44
|
+
return userGroups.some((group) => {
|
|
45
|
+
const { id: userGroupId, userMembership: { memberType: userMemberType }, typeKeywords, } = group;
|
|
46
|
+
return (channelGroupId === userGroupId &&
|
|
47
|
+
ALLOWED_GROUP_ROLES.includes(userMemberType) &&
|
|
48
|
+
!typeKeywords.includes(CANNOT_DISCUSS));
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=can-create-post.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"can-create-post.js","sourceRoot":"","sources":["../../../../../../src/discussions/api/utils/posts/can-create-post.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,aAAa,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AAIxE;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAC3B,OAAiB,EACjB,OAAiC,EAAE;IAEnC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAEzC,IAAI,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;QAChD,OAAO,IAAI,CAAC;KACb;IAED,OAAO,qCAAqC,CAAC,IAAI,EAAE;QACjD,MAAM;QACN,MAAM;QACN,IAAI;KACL,CAAC,CAAC;AACL,CAAC;AAED,SAAS,qCAAqC,CAC5C,IAA8B,EAC9B,aAAwC;IAExC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAChE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC;IAE/C,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,KAAK,CAAC;KACd;IAED,IAAI,MAAM,KAAK,aAAa,CAAC,MAAM,EAAE;QACnC,OAAO,IAAI,CAAC;KACb;IAED,IAAI,MAAM,KAAK,aAAa,CAAC,OAAO,EAAE;QACpC,OAAO,+BAA+B,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;KAC5D;IAED,IAAI,MAAM,KAAK,aAAa,CAAC,GAAG,EAAE;QAChC,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;KACjC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,+BAA+B,CACtC,gBAA0B,EAAE,EAC5B,aAAuB,EAAE;IAEzB,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,cAAsB,EAAE,EAAE;QACnD,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,KAAa,EAAE,EAAE;YACvC,MAAM,EACJ,EAAE,EAAE,WAAW,EACf,cAAc,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,EAC9C,YAAY,GACb,GAAG,KAAK,CAAC;YAEV,OAAO,CACL,cAAc,KAAK,WAAW;gBAC9B,mBAAmB,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAC5C,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CACvC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ChannelPermission } from "../channel-permission";
|
|
2
|
+
import { hasOrgAdminUpdateRights } from "../portal-privilege";
|
|
3
|
+
/**
|
|
4
|
+
* Utility to determine if User has privileges to create a reply in a channel
|
|
5
|
+
* @param channel
|
|
6
|
+
* @param user
|
|
7
|
+
* @returns {boolean}
|
|
8
|
+
*/
|
|
9
|
+
export function canCreateReplyV2(channel, user = {}) {
|
|
10
|
+
if (hasOrgAdminUpdateRights(user, channel.orgId)) {
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
if (!channel.allowReply) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
const channelPermission = new ChannelPermission(channel);
|
|
17
|
+
return channelPermission.canPostToChannel(user);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=can-create-reply-v2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"can-create-reply-v2.js","sourceRoot":"","sources":["../../../../../../src/discussions/api/utils/posts/can-create-reply-v2.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAiB,EACjB,OAAiC,EAAE;IAEnC,IAAI,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;QAChD,OAAO,IAAI,CAAC;KACb;IAED,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;QACvB,OAAO,KAAK,CAAC;KACd;IAED,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACzD,OAAO,iBAAiB,CAAC,gBAAgB,CAAC,IAAwB,CAAC,CAAC;AACtE,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { SharingAccess } from "../../types";
|
|
2
|
+
import { hasOrgAdminUpdateRights } from "../portal-privilege";
|
|
3
|
+
import { CANNOT_DISCUSS } from "../../../constants";
|
|
4
|
+
const ALLOWED_GROUP_ROLES = Object.freeze(["owner", "admin", "member"]);
|
|
5
|
+
/**
|
|
6
|
+
* Utility to determine if User has privileges to create a reply in a channel
|
|
7
|
+
*
|
|
8
|
+
* @export
|
|
9
|
+
* @deprecated replace with canCreateReplyV2 for v2 discussions
|
|
10
|
+
* @param channel
|
|
11
|
+
* @param user
|
|
12
|
+
* @returns {boolean}
|
|
13
|
+
*/
|
|
14
|
+
export function canCreateReply(channel, user = {}) {
|
|
15
|
+
const { access, groups, orgs } = channel;
|
|
16
|
+
if (hasOrgAdminUpdateRights(user, channel.orgId)) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
return isAuthorizedToPostByLegacyPermissions(user, {
|
|
20
|
+
access,
|
|
21
|
+
groups,
|
|
22
|
+
orgs,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
function isAuthorizedToPostByLegacyPermissions(user, channelParams) {
|
|
26
|
+
const { username, groups: userGroups, orgId: userOrgId } = user;
|
|
27
|
+
const { access, groups, orgs } = channelParams;
|
|
28
|
+
if (!username) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
if (access === SharingAccess.PUBLIC) {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
if (access === SharingAccess.PRIVATE) {
|
|
35
|
+
return isAuthorizedToPostByLegacyGroup(groups, userGroups);
|
|
36
|
+
}
|
|
37
|
+
if (access === SharingAccess.ORG) {
|
|
38
|
+
return orgs.includes(userOrgId);
|
|
39
|
+
}
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
function isAuthorizedToPostByLegacyGroup(channelGroups = [], userGroups = []) {
|
|
43
|
+
return channelGroups.some((channelGroupId) => {
|
|
44
|
+
return userGroups.some((group) => {
|
|
45
|
+
const { id: userGroupId, userMembership: { memberType: userMemberType }, typeKeywords, } = group;
|
|
46
|
+
return (channelGroupId === userGroupId &&
|
|
47
|
+
ALLOWED_GROUP_ROLES.includes(userMemberType) &&
|
|
48
|
+
!typeKeywords.includes(CANNOT_DISCUSS));
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=can-create-reply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"can-create-reply.js","sourceRoot":"","sources":["../../../../../../src/discussions/api/utils/posts/can-create-reply.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,aAAa,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AAIxE;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAiB,EACjB,OAAiC,EAAE;IAEnC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAEzC,IAAI,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;QAChD,OAAO,IAAI,CAAC;KACb;IAED,OAAO,qCAAqC,CAAC,IAAI,EAAE;QACjD,MAAM;QACN,MAAM;QACN,IAAI;KACL,CAAC,CAAC;AACL,CAAC;AAED,SAAS,qCAAqC,CAC5C,IAA8B,EAC9B,aAAwC;IAExC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAChE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC;IAE/C,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,KAAK,CAAC;KACd;IAED,IAAI,MAAM,KAAK,aAAa,CAAC,MAAM,EAAE;QACnC,OAAO,IAAI,CAAC;KACb;IAED,IAAI,MAAM,KAAK,aAAa,CAAC,OAAO,EAAE;QACpC,OAAO,+BAA+B,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;KAC5D;IAED,IAAI,MAAM,KAAK,aAAa,CAAC,GAAG,EAAE;QAChC,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;KACjC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,+BAA+B,CACtC,gBAA0B,EAAE,EAC5B,aAAuB,EAAE;IAEzB,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,cAAsB,EAAE,EAAE;QACnD,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,KAAa,EAAE,EAAE;YACvC,MAAM,EACJ,EAAE,EAAE,WAAW,EACf,cAAc,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,EAC9C,YAAY,GACb,GAAG,KAAK,CAAC;YAEV,OAAO,CACL,cAAc,KAAK,WAAW;gBAC9B,mBAAmB,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAC5C,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CACvC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ChannelPermission } from "../channel-permission";
|
|
2
|
+
import { hasOrgAdminUpdateRights } from "../portal-privilege";
|
|
3
|
+
/**
|
|
4
|
+
* Utility to determine if User has privileges to delete a post
|
|
5
|
+
* @export
|
|
6
|
+
* @param post
|
|
7
|
+
* @param user
|
|
8
|
+
* @param channel
|
|
9
|
+
* @returns {boolean}
|
|
10
|
+
*/
|
|
11
|
+
export function canDeletePostV2(post, channel, user = {}) {
|
|
12
|
+
return isPostCreator(post, user) || isChannelModerator(channel, user);
|
|
13
|
+
}
|
|
14
|
+
function isPostCreator(post, user) {
|
|
15
|
+
return !!user.username && post.creator === user.username;
|
|
16
|
+
}
|
|
17
|
+
function isChannelModerator(channel, user) {
|
|
18
|
+
if (hasOrgAdminUpdateRights(user, channel.orgId)) {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
const channelPermission = new ChannelPermission(channel);
|
|
22
|
+
return channelPermission.canModerateChannel(user);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=can-delete-post-v2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"can-delete-post-v2.js","sourceRoot":"","sources":["../../../../../../src/discussions/api/utils/posts/can-delete-post-v2.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAW,EACX,OAAiB,EACjB,OAAiC,EAAE;IAEnC,OAAO,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,aAAa,CAAC,IAAW,EAAE,IAA8B;IAChE,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,QAAQ,CAAC;AAC3D,CAAC;AAED,SAAS,kBAAkB,CACzB,OAAiB,EACjB,IAA8B;IAE9B,IAAI,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;QAChD,OAAO,IAAI,CAAC;KACb;IAED,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACzD,OAAO,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ChannelPermission } from "../channel-permission";
|
|
2
|
+
import { hasOrgAdminUpdateRights } from "../portal-privilege";
|
|
3
|
+
/**
|
|
4
|
+
* Utility to determine if User has privileges to delete a post
|
|
5
|
+
* @deprecated replace with canDeletePostV2 for v2 discussions
|
|
6
|
+
* @export
|
|
7
|
+
* @param post
|
|
8
|
+
* @param user
|
|
9
|
+
* @param channel
|
|
10
|
+
* @returns {boolean}
|
|
11
|
+
*/
|
|
12
|
+
export function canDeletePost(post, channel, user = {}) {
|
|
13
|
+
return isPostCreator(post, user) || isChannelModerator(channel, user);
|
|
14
|
+
}
|
|
15
|
+
function isPostCreator(post, user) {
|
|
16
|
+
return !!user.username && post.creator === user.username;
|
|
17
|
+
}
|
|
18
|
+
function isChannelModerator(channel, user) {
|
|
19
|
+
if (hasOrgAdminUpdateRights(user, channel.orgId)) {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
if (!channel.channelAcl) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
const channelPermission = new ChannelPermission(channel);
|
|
26
|
+
return channelPermission.canModerateChannel(user);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=can-delete-post.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"can-delete-post.js","sourceRoot":"","sources":["../../../../../../src/discussions/api/utils/posts/can-delete-post.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAW,EACX,OAAiB,EACjB,OAAiC,EAAE;IAEnC,OAAO,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,aAAa,CAAC,IAAW,EAAE,IAA8B;IAChE,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,QAAQ,CAAC;AAC3D,CAAC;AAED,SAAS,kBAAkB,CACzB,OAAiB,EACjB,IAA8B;IAE9B,IAAI,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;QAChD,OAAO,IAAI,CAAC;KACb;IAED,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;QACvB,OAAO,KAAK,CAAC;KACd;IAED,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACzD,OAAO,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ChannelPermission } from "../channel-permission";
|
|
2
|
+
import { hasOrgAdminUpdateRights } from "../portal-privilege";
|
|
3
|
+
/**
|
|
4
|
+
* Utility to determine if User has privileges to modify the status of a post
|
|
5
|
+
* @param channel
|
|
6
|
+
* @param user
|
|
7
|
+
* @returns {boolean}
|
|
8
|
+
*/
|
|
9
|
+
export function canEditPostStatusV2(channel, user = {}) {
|
|
10
|
+
if (hasOrgAdminUpdateRights(user, channel.orgId)) {
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
const channelPermission = new ChannelPermission(channel);
|
|
14
|
+
return channelPermission.canModerateChannel(user);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=can-edit-post-status-v2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"can-edit-post-status-v2.js","sourceRoot":"","sources":["../../../../../../src/discussions/api/utils/posts/can-edit-post-status-v2.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAiB,EACjB,OAAiC,EAAE;IAEnC,IAAI,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;QAChD,OAAO,IAAI,CAAC;KACb;IAED,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACzD,OAAO,iBAAiB,CAAC,kBAAkB,CAAC,IAAwB,CAAC,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { SharingAccess } from "../../types";
|
|
2
|
+
import { isOrgAdmin } from "../platform";
|
|
3
|
+
import { hasOrgAdminUpdateRights } from "../portal-privilege";
|
|
4
|
+
const ADMIN_GROUP_ROLES = Object.freeze(["owner", "admin"]);
|
|
5
|
+
/**
|
|
6
|
+
* Utility to determine if User has privileges to modify the status of a post
|
|
7
|
+
* @export
|
|
8
|
+
* @deprecated replace with canEditPostStatusV2 for v2 discussions
|
|
9
|
+
* @param channel
|
|
10
|
+
* @param user
|
|
11
|
+
* @returns {boolean}
|
|
12
|
+
*/
|
|
13
|
+
export function canModifyPostStatus(channel, user = {}) {
|
|
14
|
+
return canEditPostStatus(channel, user);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Utility to determine if User has privileges to modify the status of a post
|
|
18
|
+
* @export
|
|
19
|
+
* @deprecated replace with canEditPostStatusV2 for v2 discussions
|
|
20
|
+
* @param channel
|
|
21
|
+
* @param user
|
|
22
|
+
* @returns {boolean}
|
|
23
|
+
*/
|
|
24
|
+
export function canEditPostStatus(channel, user = {}) {
|
|
25
|
+
if (hasOrgAdminUpdateRights(user, channel.orgId)) {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
return isAuthorizedToModifyStatusByLegacyPermissions(user, channel);
|
|
29
|
+
}
|
|
30
|
+
function isAuthorizedToModifyStatusByLegacyPermissions(user, channel) {
|
|
31
|
+
const { username, groups: userGroups = [] } = user;
|
|
32
|
+
const { access, groups: channelGroups = [], orgs: channelOrgs = [], creator: channelCreator, } = channel;
|
|
33
|
+
if (!username) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
if (channelCreator === username) {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
if (access === SharingAccess.PRIVATE) {
|
|
40
|
+
return isAuthorizedToModifyStatusByLegacyGroup(channelGroups, userGroups);
|
|
41
|
+
}
|
|
42
|
+
// public or org access
|
|
43
|
+
return (isAuthorizedToModifyStatusByLegacyGroup(channelGroups, userGroups) ||
|
|
44
|
+
isLegacyChannelOrgAdmin(channelOrgs, user));
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Ensure the user is an owner/admin of one of the channel groups
|
|
48
|
+
*/
|
|
49
|
+
function isAuthorizedToModifyStatusByLegacyGroup(channelGroups, userGroups) {
|
|
50
|
+
return channelGroups.some((channelGroupId) => {
|
|
51
|
+
return userGroups.some((group) => {
|
|
52
|
+
const { id: userGroupId, userMembership: { memberType: userMemberType }, } = group;
|
|
53
|
+
return (channelGroupId === userGroupId &&
|
|
54
|
+
ADMIN_GROUP_ROLES.includes(userMemberType));
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
function isLegacyChannelOrgAdmin(channelOrgs, user) {
|
|
59
|
+
return isOrgAdmin(user) && channelOrgs.includes(user.orgId);
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=can-edit-post-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"can-edit-post-status.js","sourceRoot":"","sources":["../../../../../../src/discussions/api/utils/posts/can-edit-post-status.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,aAAa,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAE5D;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAiB,EACjB,OAAiC,EAAE;IAEnC,OAAO,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAiB,EACjB,OAAiC,EAAE;IAEnC,IAAI,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;QAChD,OAAO,IAAI,CAAC;KACb;IAED,OAAO,6CAA6C,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,6CAA6C,CACpD,IAA8B,EAC9B,OAAiB;IAEjB,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;IACnD,MAAM,EACJ,MAAM,EACN,MAAM,EAAE,aAAa,GAAG,EAAE,EAC1B,IAAI,EAAE,WAAW,GAAG,EAAE,EACtB,OAAO,EAAE,cAAc,GACxB,GAAG,OAAO,CAAC;IAEZ,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,KAAK,CAAC;KACd;IAED,IAAI,cAAc,KAAK,QAAQ,EAAE;QAC/B,OAAO,IAAI,CAAC;KACb;IAED,IAAI,MAAM,KAAK,aAAa,CAAC,OAAO,EAAE;QACpC,OAAO,uCAAuC,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;KAC3E;IAED,uBAAuB;IACvB,OAAO,CACL,uCAAuC,CAAC,aAAa,EAAE,UAAU,CAAC;QAClE,uBAAuB,CAAC,WAAW,EAAE,IAAI,CAAC,CAC3C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,uCAAuC,CAC9C,aAAuB,EACvB,UAAoB;IAEpB,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,cAAsB,EAAE,EAAE;QACnD,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,KAAa,EAAE,EAAE;YACvC,MAAM,EACJ,EAAE,EAAE,WAAW,EACf,cAAc,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,GAC/C,GAAG,KAAK,CAAC;YAEV,OAAO,CACL,cAAc,KAAK,WAAW;gBAC9B,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAC3C,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,uBAAuB,CAC9B,WAAqB,EACrB,IAA8B;IAE9B,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ChannelPermission } from "../channel-permission";
|
|
2
|
+
/**
|
|
3
|
+
* Utility to determine if User has privileges to modify a post
|
|
4
|
+
* @param post
|
|
5
|
+
* @param user
|
|
6
|
+
* @param channel
|
|
7
|
+
* @returns {boolean}
|
|
8
|
+
*/
|
|
9
|
+
export function canEditPostV2(post, user = {}, channel) {
|
|
10
|
+
const canReplyOrPost = post.parentId ? channel.allowReply : channel.allowPost;
|
|
11
|
+
const channelPermission = new ChannelPermission(channel);
|
|
12
|
+
return (isPostCreator(post, user) &&
|
|
13
|
+
canReplyOrPost &&
|
|
14
|
+
channelPermission.canPostToChannel(user));
|
|
15
|
+
}
|
|
16
|
+
function isPostCreator(post, user) {
|
|
17
|
+
return !!user.username && post.creator === user.username;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=can-edit-post-v2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"can-edit-post-v2.js","sourceRoot":"","sources":["../../../../../../src/discussions/api/utils/posts/can-edit-post-v2.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAW,EACX,OAAiC,EAAE,EACnC,OAAiB;IAEjB,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC9E,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAEzD,OAAO,CACL,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC;QACzB,cAAc;QACd,iBAAiB,CAAC,gBAAgB,CAAC,IAAI,CAAC,CACzC,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,IAAW,EAAE,IAA8B;IAChE,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,QAAQ,CAAC;AAC3D,CAAC"}
|