Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F2753121
D7581.id25586.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
24 KB
Referenced Files
None
Subscribers
None
D7581.id25586.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D7581: [lib] Move `getRolePermissionBlobs` to `lib`
Attached
Detach File
Event Timeline
Log In to Comment