Page MenuHomePhabricator

D7581.id25586.diff
No OneTemporary

D7581.id25586.diff

diff --git a/keyserver/src/creators/role-creator.js b/keyserver/src/creators/role-creator.js
--- a/keyserver/src/creators/role-creator.js
+++ b/keyserver/src/creators/role-creator.js
@@ -1,14 +1,7 @@
// @flow
-import {
- type RoleInfo,
- threadPermissions,
- threadPermissionPropagationPrefixes,
- threadPermissionFilterPrefixes,
- type ThreadRolePermissionsBlob,
- type ThreadType,
- threadTypes,
-} from 'lib/types/thread-types.js';
+import { getRolePermissionBlobs } from 'lib/permissions/thread-permissions.js';
+import type { RoleInfo, ThreadType } from 'lib/types/thread-types.js';
import createIDs from './id-creator.js';
import { dbQuery, SQL } from '../database/database.js';
@@ -65,255 +58,4 @@
};
}
-type RolePermissionBlobs = {
- +Members: ThreadRolePermissionsBlob,
- +Admins?: ThreadRolePermissionsBlob,
-};
-
-const { CHILD, DESCENDANT } = threadPermissionPropagationPrefixes;
-const { OPEN, TOP_LEVEL, OPEN_TOP_LEVEL } = threadPermissionFilterPrefixes;
-const OPEN_CHILD = CHILD + OPEN;
-const OPEN_DESCENDANT = DESCENDANT + OPEN;
-const TOP_LEVEL_DESCENDANT = DESCENDANT + TOP_LEVEL;
-const OPEN_TOP_LEVEL_DESCENDANT = DESCENDANT + OPEN_TOP_LEVEL;
-
-const voicedPermissions = {
- [threadPermissions.VOICED]: true,
- [threadPermissions.EDIT_ENTRIES]: true,
- [threadPermissions.EDIT_THREAD_NAME]: true,
- [threadPermissions.EDIT_THREAD_COLOR]: true,
- [threadPermissions.EDIT_THREAD_DESCRIPTION]: true,
- [threadPermissions.EDIT_THREAD_AVATAR]: true,
- [threadPermissions.CREATE_SUBCHANNELS]: true,
- [threadPermissions.ADD_MEMBERS]: true,
-};
-
-function getRolePermissionBlobsForCommunity(
- threadType: ThreadType,
-): RolePermissionBlobs {
- const openDescendantKnowOf = OPEN_DESCENDANT + threadPermissions.KNOW_OF;
- const openDescendantVisible = OPEN_DESCENDANT + threadPermissions.VISIBLE;
- const openTopLevelDescendantJoinThread =
- OPEN_TOP_LEVEL_DESCENDANT + threadPermissions.JOIN_THREAD;
- const openChildJoinThread = OPEN_CHILD + threadPermissions.JOIN_THREAD;
- const openChildAddMembers = OPEN_CHILD + threadPermissions.ADD_MEMBERS;
-
- const genesisMemberPermissions = {
- [threadPermissions.KNOW_OF]: true,
- [threadPermissions.VISIBLE]: true,
- [openDescendantKnowOf]: true,
- [openDescendantVisible]: true,
- [openTopLevelDescendantJoinThread]: true,
- };
- const baseMemberPermissions = {
- ...genesisMemberPermissions,
- [threadPermissions.REACT_TO_MESSAGE]: true,
- [threadPermissions.EDIT_MESSAGE]: true,
- [threadPermissions.LEAVE_THREAD]: true,
- [threadPermissions.CREATE_SIDEBARS]: true,
- [threadPermissions.ADD_MEMBERS]: true,
- [openChildJoinThread]: true,
- [openChildAddMembers]: true,
- };
-
- let memberPermissions;
- if (threadType === threadTypes.COMMUNITY_ANNOUNCEMENT_ROOT) {
- memberPermissions = baseMemberPermissions;
- } else if (threadType === threadTypes.GENESIS) {
- memberPermissions = genesisMemberPermissions;
- } else {
- memberPermissions = {
- ...baseMemberPermissions,
- ...voicedPermissions,
- };
- }
-
- const descendantKnowOf = DESCENDANT + threadPermissions.KNOW_OF;
- const descendantVisible = DESCENDANT + threadPermissions.VISIBLE;
- const topLevelDescendantJoinThread =
- TOP_LEVEL_DESCENDANT + threadPermissions.JOIN_THREAD;
- const childJoinThread = CHILD + threadPermissions.JOIN_THREAD;
- const descendantVoiced = DESCENDANT + threadPermissions.VOICED;
- const descendantEditEntries = DESCENDANT + threadPermissions.EDIT_ENTRIES;
- const descendantEditThreadName =
- DESCENDANT + threadPermissions.EDIT_THREAD_NAME;
- const descendantEditThreadColor =
- DESCENDANT + threadPermissions.EDIT_THREAD_COLOR;
- const descendantEditThreadDescription =
- DESCENDANT + threadPermissions.EDIT_THREAD_DESCRIPTION;
- const descendantEditThreadAvatar =
- DESCENDANT + threadPermissions.EDIT_THREAD_AVATAR;
- const topLevelDescendantCreateSubchannels =
- TOP_LEVEL_DESCENDANT + threadPermissions.CREATE_SUBCHANNELS;
- const topLevelDescendantCreateSidebars =
- TOP_LEVEL_DESCENDANT + threadPermissions.CREATE_SIDEBARS;
- const descendantAddMembers = DESCENDANT + threadPermissions.ADD_MEMBERS;
- const descendantDeleteThread = DESCENDANT + threadPermissions.DELETE_THREAD;
- const descendantEditPermissions =
- DESCENDANT + threadPermissions.EDIT_PERMISSIONS;
- const descendantRemoveMembers = DESCENDANT + threadPermissions.REMOVE_MEMBERS;
- const descendantChangeRole = DESCENDANT + threadPermissions.CHANGE_ROLE;
- const descendantManagePins = DESCENDANT + threadPermissions.MANAGE_PINS;
-
- const baseAdminPermissions = {
- [threadPermissions.KNOW_OF]: true,
- [threadPermissions.VISIBLE]: true,
- [threadPermissions.VOICED]: true,
- [threadPermissions.REACT_TO_MESSAGE]: true,
- [threadPermissions.EDIT_MESSAGE]: true,
- [threadPermissions.EDIT_ENTRIES]: true,
- [threadPermissions.EDIT_THREAD_NAME]: true,
- [threadPermissions.EDIT_THREAD_COLOR]: true,
- [threadPermissions.EDIT_THREAD_DESCRIPTION]: true,
- [threadPermissions.EDIT_THREAD_AVATAR]: true,
- [threadPermissions.CREATE_SUBCHANNELS]: true,
- [threadPermissions.CREATE_SIDEBARS]: true,
- [threadPermissions.ADD_MEMBERS]: true,
- [threadPermissions.DELETE_THREAD]: true,
- [threadPermissions.REMOVE_MEMBERS]: true,
- [threadPermissions.CHANGE_ROLE]: true,
- [threadPermissions.MANAGE_PINS]: true,
- [descendantKnowOf]: true,
- [descendantVisible]: true,
- [topLevelDescendantJoinThread]: true,
- [childJoinThread]: true,
- [descendantVoiced]: true,
- [descendantEditEntries]: true,
- [descendantEditThreadName]: true,
- [descendantEditThreadColor]: true,
- [descendantEditThreadDescription]: true,
- [descendantEditThreadAvatar]: true,
- [topLevelDescendantCreateSubchannels]: true,
- [topLevelDescendantCreateSidebars]: true,
- [descendantAddMembers]: true,
- [descendantDeleteThread]: true,
- [descendantEditPermissions]: true,
- [descendantRemoveMembers]: true,
- [descendantChangeRole]: true,
- [descendantManagePins]: true,
- };
-
- let adminPermissions;
- if (threadType === threadTypes.GENESIS) {
- adminPermissions = baseAdminPermissions;
- } else {
- adminPermissions = {
- ...baseAdminPermissions,
- [threadPermissions.LEAVE_THREAD]: true,
- };
- }
-
- return {
- Members: memberPermissions,
- Admins: adminPermissions,
- };
-}
-
-function getRolePermissionBlobs(threadType: ThreadType): RolePermissionBlobs {
- if (threadType === threadTypes.SIDEBAR) {
- const memberPermissions = {
- [threadPermissions.VOICED]: true,
- [threadPermissions.REACT_TO_MESSAGE]: true,
- [threadPermissions.EDIT_MESSAGE]: true,
- [threadPermissions.EDIT_THREAD_NAME]: true,
- [threadPermissions.EDIT_THREAD_COLOR]: true,
- [threadPermissions.EDIT_THREAD_DESCRIPTION]: true,
- [threadPermissions.EDIT_THREAD_AVATAR]: true,
- [threadPermissions.ADD_MEMBERS]: true,
- [threadPermissions.EDIT_PERMISSIONS]: true,
- [threadPermissions.REMOVE_MEMBERS]: true,
- [threadPermissions.LEAVE_THREAD]: true,
- };
- return {
- Members: memberPermissions,
- };
- }
-
- const openDescendantKnowOf = OPEN_DESCENDANT + threadPermissions.KNOW_OF;
- const openDescendantVisible = OPEN_DESCENDANT + threadPermissions.VISIBLE;
- const openChildJoinThread = OPEN_CHILD + threadPermissions.JOIN_THREAD;
-
- if (threadType === threadTypes.PRIVATE) {
- const memberPermissions = {
- [threadPermissions.KNOW_OF]: true,
- [threadPermissions.VISIBLE]: true,
- [threadPermissions.VOICED]: true,
- [threadPermissions.REACT_TO_MESSAGE]: true,
- [threadPermissions.EDIT_MESSAGE]: true,
- [threadPermissions.EDIT_THREAD_COLOR]: true,
- [threadPermissions.EDIT_THREAD_DESCRIPTION]: true,
- [threadPermissions.CREATE_SIDEBARS]: true,
- [threadPermissions.EDIT_ENTRIES]: true,
- [openDescendantKnowOf]: true,
- [openDescendantVisible]: true,
- [openChildJoinThread]: true,
- };
- return {
- Members: memberPermissions,
- };
- }
-
- if (threadType === threadTypes.PERSONAL) {
- return {
- Members: {
- [threadPermissions.KNOW_OF]: true,
- [threadPermissions.VISIBLE]: true,
- [threadPermissions.VOICED]: true,
- [threadPermissions.REACT_TO_MESSAGE]: true,
- [threadPermissions.EDIT_MESSAGE]: true,
- [threadPermissions.EDIT_ENTRIES]: true,
- [threadPermissions.EDIT_THREAD_NAME]: true,
- [threadPermissions.EDIT_THREAD_COLOR]: true,
- [threadPermissions.EDIT_THREAD_DESCRIPTION]: true,
- [threadPermissions.CREATE_SIDEBARS]: true,
- [openDescendantKnowOf]: true,
- [openDescendantVisible]: true,
- [openChildJoinThread]: true,
- },
- };
- }
-
- const openTopLevelDescendantJoinThread =
- OPEN_TOP_LEVEL_DESCENDANT + threadPermissions.JOIN_THREAD;
-
- const subthreadBasePermissions = {
- [threadPermissions.KNOW_OF]: true,
- [threadPermissions.VISIBLE]: true,
- [threadPermissions.REACT_TO_MESSAGE]: true,
- [threadPermissions.EDIT_MESSAGE]: true,
- [threadPermissions.CREATE_SIDEBARS]: true,
- [threadPermissions.LEAVE_THREAD]: true,
- [openDescendantKnowOf]: true,
- [openDescendantVisible]: true,
- [openTopLevelDescendantJoinThread]: true,
- [openChildJoinThread]: true,
- };
-
- if (
- threadType === threadTypes.COMMUNITY_OPEN_SUBTHREAD ||
- threadType === threadTypes.COMMUNITY_SECRET_SUBTHREAD
- ) {
- const memberPermissions = {
- [threadPermissions.REMOVE_MEMBERS]: true,
- [threadPermissions.EDIT_PERMISSIONS]: true,
- ...subthreadBasePermissions,
- ...voicedPermissions,
- };
- return {
- Members: memberPermissions,
- };
- }
-
- if (
- threadType === threadTypes.COMMUNITY_OPEN_ANNOUNCEMENT_SUBTHREAD ||
- threadType === threadTypes.COMMUNITY_SECRET_ANNOUNCEMENT_SUBTHREAD
- ) {
- return {
- Members: subthreadBasePermissions,
- };
- }
-
- return getRolePermissionBlobsForCommunity(threadType);
-}
-
-export { createInitialRolesForNewThread, getRolePermissionBlobs };
+export { createInitialRolesForNewThread };
diff --git a/keyserver/src/creators/thread-creator.js b/keyserver/src/creators/thread-creator.js
--- a/keyserver/src/creators/thread-creator.js
+++ b/keyserver/src/creators/thread-creator.js
@@ -4,6 +4,7 @@
import bots from 'lib/facts/bots.js';
import genesis from 'lib/facts/genesis.js';
+import { getRolePermissionBlobs } from 'lib/permissions/thread-permissions.js';
import {
generatePendingThreadColor,
generateRandomColor,
@@ -27,10 +28,7 @@
import createIDs from './id-creator.js';
import createMessages from './message-creator.js';
-import {
- createInitialRolesForNewThread,
- getRolePermissionBlobs,
-} from './role-creator.js';
+import { createInitialRolesForNewThread } from './role-creator.js';
import type { UpdatesForCurrentSession } from './update-creator.js';
import { dbQuery, SQL } from '../database/database.js';
import {
diff --git a/keyserver/src/updaters/role-updaters.js b/keyserver/src/updaters/role-updaters.js
--- a/keyserver/src/updaters/role-updaters.js
+++ b/keyserver/src/updaters/role-updaters.js
@@ -3,10 +3,10 @@
import invariant from 'invariant';
import _isEqual from 'lodash/fp/isEqual.js';
+import { getRolePermissionBlobs } from 'lib/permissions/thread-permissions.js';
import type { ThreadType } from 'lib/types/thread-types.js';
import createIDs from '../creators/id-creator.js';
-import { getRolePermissionBlobs } from '../creators/role-creator.js';
import { dbQuery, SQL } from '../database/database.js';
import { fetchRoles } from '../fetchers/role-fetchers.js';
import type { Viewer } from '../session/viewer.js';
@@ -49,7 +49,9 @@
const setAdminQuery = SQL`
UPDATE memberships
SET role = ${id}
- WHERE thread = ${threadID} AND user = ${viewer.userID} AND role > 0
+ WHERE thread = ${threadID}
+ AND user = ${viewer.userID}
+ AND role > 0
`;
promises.push(dbQuery(setAdminQuery));
} else if (!rolePermissions.Admins && currentRolePermissions.Admins) {
@@ -59,13 +61,17 @@
);
const id = currentRoleIDs.Admins;
const deleteQuery = SQL`
- DELETE r, i FROM roles r LEFT JOIN ids i ON i.id = r.id WHERE r.id = ${id}
+ DELETE r, i
+ FROM roles r
+ LEFT JOIN ids i ON i.id = r.id
+ WHERE r.id = ${id}
`;
promises.push(dbQuery(deleteQuery));
const updateMembershipsQuery = SQL`
UPDATE memberships
SET role = ${currentRoleIDs.Members}
- WHERE thread = ${threadID} AND role > 0
+ WHERE thread = ${threadID}
+ AND role > 0
`;
promises.push(dbQuery(updateMembershipsQuery));
}
diff --git a/keyserver/src/updaters/thread-updaters.js b/keyserver/src/updaters/thread-updaters.js
--- a/keyserver/src/updaters/thread-updaters.js
+++ b/keyserver/src/updaters/thread-updaters.js
@@ -1,5 +1,6 @@
// @flow
+import { getRolePermissionBlobs } from 'lib/permissions/thread-permissions.js';
import { filteredThreadIDs } from 'lib/selectors/calendar-filter-selectors.js';
import { getPinnedContentFromMessage } from 'lib/shared/message-utils.js';
import {
@@ -41,7 +42,6 @@
commitMembershipChangeset,
} from './thread-permission-updaters.js';
import createMessages from '../creators/message-creator.js';
-import { getRolePermissionBlobs } from '../creators/role-creator.js';
import { createUpdates } from '../creators/update-creator.js';
import { dbQuery, SQL } from '../database/database.js';
import { fetchEntryInfos } from '../fetchers/entry-fetchers.js';
@@ -93,7 +93,8 @@
const query = SQL`
SELECT user, role
FROM memberships
- WHERE user IN (${memberIDs}) AND thread = ${request.threadID}
+ WHERE user IN (${memberIDs})
+ AND thread = ${request.threadID}
`;
const [result] = await dbQuery(query);
@@ -168,7 +169,8 @@
SELECT m.user, m.role, t.default_role
FROM memberships m
LEFT JOIN threads t ON t.id = m.thread
- WHERE m.user IN (${memberIDs}) AND m.thread = ${request.threadID}
+ WHERE m.user IN (${memberIDs})
+ AND m.thread = ${request.threadID}
`;
const [result] = await dbQuery(query);
@@ -951,8 +953,10 @@
const togglePinQuery = SQL`
UPDATE messages
- SET pinned = ${pinnedValue}, pin_time = ${pinTimeValue}
- WHERE id = ${messageID} AND thread = ${threadID}
+ SET pinned = ${pinnedValue},
+ pin_time = ${pinTimeValue}
+ WHERE id = ${messageID}
+ AND thread = ${threadID}
`;
const messageData = {
diff --git a/lib/permissions/thread-permissions.js b/lib/permissions/thread-permissions.js
--- a/lib/permissions/thread-permissions.js
+++ b/lib/permissions/thread-permissions.js
@@ -13,6 +13,8 @@
type ThreadPermissionsInfo,
threadPermissions,
threadPermissionPropagationPrefixes,
+ threadPermissionFilterPrefixes,
+ threadTypes,
} from '../types/thread-types.js';
function permissionLookup(
@@ -150,10 +152,262 @@
}
}
+type RolePermissionBlobs = {
+ +Members: ThreadRolePermissionsBlob,
+ +Admins?: ThreadRolePermissionsBlob,
+};
+
+const { CHILD, DESCENDANT } = threadPermissionPropagationPrefixes;
+const { OPEN, TOP_LEVEL, OPEN_TOP_LEVEL } = threadPermissionFilterPrefixes;
+const OPEN_CHILD = CHILD + OPEN;
+const OPEN_DESCENDANT = DESCENDANT + OPEN;
+const TOP_LEVEL_DESCENDANT = DESCENDANT + TOP_LEVEL;
+const OPEN_TOP_LEVEL_DESCENDANT = DESCENDANT + OPEN_TOP_LEVEL;
+
+const voicedPermissions = {
+ [threadPermissions.VOICED]: true,
+ [threadPermissions.EDIT_ENTRIES]: true,
+ [threadPermissions.EDIT_THREAD_NAME]: true,
+ [threadPermissions.EDIT_THREAD_COLOR]: true,
+ [threadPermissions.EDIT_THREAD_DESCRIPTION]: true,
+ [threadPermissions.EDIT_THREAD_AVATAR]: true,
+ [threadPermissions.CREATE_SUBCHANNELS]: true,
+ [threadPermissions.ADD_MEMBERS]: true,
+};
+
+function getRolePermissionBlobsForCommunity(
+ threadType: ThreadType,
+): RolePermissionBlobs {
+ const openDescendantKnowOf = OPEN_DESCENDANT + threadPermissions.KNOW_OF;
+ const openDescendantVisible = OPEN_DESCENDANT + threadPermissions.VISIBLE;
+ const openTopLevelDescendantJoinThread =
+ OPEN_TOP_LEVEL_DESCENDANT + threadPermissions.JOIN_THREAD;
+ const openChildJoinThread = OPEN_CHILD + threadPermissions.JOIN_THREAD;
+ const openChildAddMembers = OPEN_CHILD + threadPermissions.ADD_MEMBERS;
+
+ const genesisMemberPermissions = {
+ [threadPermissions.KNOW_OF]: true,
+ [threadPermissions.VISIBLE]: true,
+ [openDescendantKnowOf]: true,
+ [openDescendantVisible]: true,
+ [openTopLevelDescendantJoinThread]: true,
+ };
+ const baseMemberPermissions = {
+ ...genesisMemberPermissions,
+ [threadPermissions.REACT_TO_MESSAGE]: true,
+ [threadPermissions.EDIT_MESSAGE]: true,
+ [threadPermissions.LEAVE_THREAD]: true,
+ [threadPermissions.CREATE_SIDEBARS]: true,
+ [threadPermissions.ADD_MEMBERS]: true,
+ [openChildJoinThread]: true,
+ [openChildAddMembers]: true,
+ };
+
+ let memberPermissions;
+ if (threadType === threadTypes.COMMUNITY_ANNOUNCEMENT_ROOT) {
+ memberPermissions = baseMemberPermissions;
+ } else if (threadType === threadTypes.GENESIS) {
+ memberPermissions = genesisMemberPermissions;
+ } else {
+ memberPermissions = {
+ ...baseMemberPermissions,
+ ...voicedPermissions,
+ };
+ }
+
+ const descendantKnowOf = DESCENDANT + threadPermissions.KNOW_OF;
+ const descendantVisible = DESCENDANT + threadPermissions.VISIBLE;
+ const topLevelDescendantJoinThread =
+ TOP_LEVEL_DESCENDANT + threadPermissions.JOIN_THREAD;
+ const childJoinThread = CHILD + threadPermissions.JOIN_THREAD;
+ const descendantVoiced = DESCENDANT + threadPermissions.VOICED;
+ const descendantEditEntries = DESCENDANT + threadPermissions.EDIT_ENTRIES;
+ const descendantEditThreadName =
+ DESCENDANT + threadPermissions.EDIT_THREAD_NAME;
+ const descendantEditThreadColor =
+ DESCENDANT + threadPermissions.EDIT_THREAD_COLOR;
+ const descendantEditThreadDescription =
+ DESCENDANT + threadPermissions.EDIT_THREAD_DESCRIPTION;
+ const descendantEditThreadAvatar =
+ DESCENDANT + threadPermissions.EDIT_THREAD_AVATAR;
+ const topLevelDescendantCreateSubchannels =
+ TOP_LEVEL_DESCENDANT + threadPermissions.CREATE_SUBCHANNELS;
+ const topLevelDescendantCreateSidebars =
+ TOP_LEVEL_DESCENDANT + threadPermissions.CREATE_SIDEBARS;
+ const descendantAddMembers = DESCENDANT + threadPermissions.ADD_MEMBERS;
+ const descendantDeleteThread = DESCENDANT + threadPermissions.DELETE_THREAD;
+ const descendantEditPermissions =
+ DESCENDANT + threadPermissions.EDIT_PERMISSIONS;
+ const descendantRemoveMembers = DESCENDANT + threadPermissions.REMOVE_MEMBERS;
+ const descendantChangeRole = DESCENDANT + threadPermissions.CHANGE_ROLE;
+ const descendantManagePins = DESCENDANT + threadPermissions.MANAGE_PINS;
+
+ const baseAdminPermissions = {
+ [threadPermissions.KNOW_OF]: true,
+ [threadPermissions.VISIBLE]: true,
+ [threadPermissions.VOICED]: true,
+ [threadPermissions.REACT_TO_MESSAGE]: true,
+ [threadPermissions.EDIT_MESSAGE]: true,
+ [threadPermissions.EDIT_ENTRIES]: true,
+ [threadPermissions.EDIT_THREAD_NAME]: true,
+ [threadPermissions.EDIT_THREAD_COLOR]: true,
+ [threadPermissions.EDIT_THREAD_DESCRIPTION]: true,
+ [threadPermissions.EDIT_THREAD_AVATAR]: true,
+ [threadPermissions.CREATE_SUBCHANNELS]: true,
+ [threadPermissions.CREATE_SIDEBARS]: true,
+ [threadPermissions.ADD_MEMBERS]: true,
+ [threadPermissions.DELETE_THREAD]: true,
+ [threadPermissions.REMOVE_MEMBERS]: true,
+ [threadPermissions.CHANGE_ROLE]: true,
+ [threadPermissions.MANAGE_PINS]: true,
+ [descendantKnowOf]: true,
+ [descendantVisible]: true,
+ [topLevelDescendantJoinThread]: true,
+ [childJoinThread]: true,
+ [descendantVoiced]: true,
+ [descendantEditEntries]: true,
+ [descendantEditThreadName]: true,
+ [descendantEditThreadColor]: true,
+ [descendantEditThreadDescription]: true,
+ [descendantEditThreadAvatar]: true,
+ [topLevelDescendantCreateSubchannels]: true,
+ [topLevelDescendantCreateSidebars]: true,
+ [descendantAddMembers]: true,
+ [descendantDeleteThread]: true,
+ [descendantEditPermissions]: true,
+ [descendantRemoveMembers]: true,
+ [descendantChangeRole]: true,
+ [descendantManagePins]: true,
+ };
+
+ let adminPermissions;
+ if (threadType === threadTypes.GENESIS) {
+ adminPermissions = baseAdminPermissions;
+ } else {
+ adminPermissions = {
+ ...baseAdminPermissions,
+ [threadPermissions.LEAVE_THREAD]: true,
+ };
+ }
+
+ return {
+ Members: memberPermissions,
+ Admins: adminPermissions,
+ };
+}
+
+function getRolePermissionBlobs(threadType: ThreadType): RolePermissionBlobs {
+ if (threadType === threadTypes.SIDEBAR) {
+ const memberPermissions = {
+ [threadPermissions.VOICED]: true,
+ [threadPermissions.REACT_TO_MESSAGE]: true,
+ [threadPermissions.EDIT_MESSAGE]: true,
+ [threadPermissions.EDIT_THREAD_NAME]: true,
+ [threadPermissions.EDIT_THREAD_COLOR]: true,
+ [threadPermissions.EDIT_THREAD_DESCRIPTION]: true,
+ [threadPermissions.EDIT_THREAD_AVATAR]: true,
+ [threadPermissions.ADD_MEMBERS]: true,
+ [threadPermissions.EDIT_PERMISSIONS]: true,
+ [threadPermissions.REMOVE_MEMBERS]: true,
+ [threadPermissions.LEAVE_THREAD]: true,
+ };
+ return {
+ Members: memberPermissions,
+ };
+ }
+
+ const openDescendantKnowOf = OPEN_DESCENDANT + threadPermissions.KNOW_OF;
+ const openDescendantVisible = OPEN_DESCENDANT + threadPermissions.VISIBLE;
+ const openChildJoinThread = OPEN_CHILD + threadPermissions.JOIN_THREAD;
+
+ if (threadType === threadTypes.PRIVATE) {
+ const memberPermissions = {
+ [threadPermissions.KNOW_OF]: true,
+ [threadPermissions.VISIBLE]: true,
+ [threadPermissions.VOICED]: true,
+ [threadPermissions.REACT_TO_MESSAGE]: true,
+ [threadPermissions.EDIT_MESSAGE]: true,
+ [threadPermissions.EDIT_THREAD_COLOR]: true,
+ [threadPermissions.EDIT_THREAD_DESCRIPTION]: true,
+ [threadPermissions.CREATE_SIDEBARS]: true,
+ [threadPermissions.EDIT_ENTRIES]: true,
+ [openDescendantKnowOf]: true,
+ [openDescendantVisible]: true,
+ [openChildJoinThread]: true,
+ };
+ return {
+ Members: memberPermissions,
+ };
+ }
+
+ if (threadType === threadTypes.PERSONAL) {
+ return {
+ Members: {
+ [threadPermissions.KNOW_OF]: true,
+ [threadPermissions.VISIBLE]: true,
+ [threadPermissions.VOICED]: true,
+ [threadPermissions.REACT_TO_MESSAGE]: true,
+ [threadPermissions.EDIT_MESSAGE]: true,
+ [threadPermissions.EDIT_ENTRIES]: true,
+ [threadPermissions.EDIT_THREAD_NAME]: true,
+ [threadPermissions.EDIT_THREAD_COLOR]: true,
+ [threadPermissions.EDIT_THREAD_DESCRIPTION]: true,
+ [threadPermissions.CREATE_SIDEBARS]: true,
+ [openDescendantKnowOf]: true,
+ [openDescendantVisible]: true,
+ [openChildJoinThread]: true,
+ },
+ };
+ }
+
+ const openTopLevelDescendantJoinThread =
+ OPEN_TOP_LEVEL_DESCENDANT + threadPermissions.JOIN_THREAD;
+
+ const subthreadBasePermissions = {
+ [threadPermissions.KNOW_OF]: true,
+ [threadPermissions.VISIBLE]: true,
+ [threadPermissions.REACT_TO_MESSAGE]: true,
+ [threadPermissions.EDIT_MESSAGE]: true,
+ [threadPermissions.CREATE_SIDEBARS]: true,
+ [threadPermissions.LEAVE_THREAD]: true,
+ [openDescendantKnowOf]: true,
+ [openDescendantVisible]: true,
+ [openTopLevelDescendantJoinThread]: true,
+ [openChildJoinThread]: true,
+ };
+
+ if (
+ threadType === threadTypes.COMMUNITY_OPEN_SUBTHREAD ||
+ threadType === threadTypes.COMMUNITY_SECRET_SUBTHREAD
+ ) {
+ const memberPermissions = {
+ [threadPermissions.REMOVE_MEMBERS]: true,
+ [threadPermissions.EDIT_PERMISSIONS]: true,
+ ...subthreadBasePermissions,
+ ...voicedPermissions,
+ };
+ return {
+ Members: memberPermissions,
+ };
+ }
+
+ if (
+ threadType === threadTypes.COMMUNITY_OPEN_ANNOUNCEMENT_SUBTHREAD ||
+ threadType === threadTypes.COMMUNITY_SECRET_ANNOUNCEMENT_SUBTHREAD
+ ) {
+ return {
+ Members: subthreadBasePermissions,
+ };
+ }
+
+ return getRolePermissionBlobsForCommunity(threadType);
+}
+
export {
permissionLookup,
getAllThreadPermissions,
makePermissionsBlob,
makePermissionsForChildrenBlob,
getRoleForPermissions,
+ getRolePermissionBlobs,
};

File Metadata

Mime Type
text/plain
Expires
Thu, Sep 19, 4:35 PM (7 h, 58 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2141003
Default Alt Text
D7581.id25586.diff (24 KB)

Event Timeline