Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F2841765
D13068.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
6 KB
Referenced Files
None
Subscribers
None
D13068.diff
View Options
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 @@
threadPermissionPropagationPrefixes,
threadPermissions,
userSurfacedPermissions,
+ threadPermissionsRequiringVoicedInAnnouncementChannels,
+ threadPermissionsRemovedForGenesisMembers,
} from '../types/thread-permission-types.js';
import type {
ThreadPermission,
@@ -31,6 +33,7 @@
threadTypeIsThick,
assertThickThreadType,
assertThinThreadType,
+ threadTypeIsCommunityRoot,
} from '../types/thread-types-enum.js';
function permissionLookup(
@@ -130,16 +133,21 @@
(permissions: ThreadPermissionsBlob),
threadPermissions.VOICED_IN_ANNOUNCEMENT_CHANNELS,
);
-
if (
threadIsAnnouncementThread &&
- hasVoicedInAnnouncementChannelsPermission &&
- isMember
+ !hasVoicedInAnnouncementChannelsPermission
) {
- permissions[threadPermissions.VOICED] = {
- value: true,
- source: threadID,
- };
+ for (const permission of threadPermissionsRequiringVoicedInAnnouncementChannels) {
+ delete permissions[permission];
+ }
+ }
+ if (
+ threadType === threadTypes.GENESIS &&
+ !hasVoicedInAnnouncementChannelsPermission
+ ) {
+ for (const permission of threadPermissionsRemovedForGenesisMembers) {
+ delete permissions[permission];
+ }
}
if (Object.keys(permissions).length === 0) {
@@ -227,12 +235,10 @@
const TOP_LEVEL_DESCENDANT = DESCENDANT + TOP_LEVEL;
const OPEN_TOP_LEVEL_DESCENDANT = DESCENDANT + OPEN_TOP_LEVEL;
-const baseMemberUserSurfacedPermissions = [
+const defaultUserSurfacedPermissions = [
userSurfacedPermissions.REACT_TO_MESSAGES,
userSurfacedPermissions.EDIT_MESSAGES,
userSurfacedPermissions.ADD_MEMBERS,
-];
-const baseVoicedUserSurfacedPermissions = [
userSurfacedPermissions.EDIT_CALENDAR,
userSurfacedPermissions.CREATE_AND_EDIT_CHANNELS,
];
@@ -240,20 +246,8 @@
function getRolePermissionBlobsForCommunityRoot(
threadType: ThinThreadType,
): RolePermissionBlobs {
- let memberUserSurfacedPermissions;
- if (threadType === threadTypes.GENESIS) {
- memberUserSurfacedPermissions = [];
- } else if (threadType === threadTypes.COMMUNITY_ANNOUNCEMENT_ROOT) {
- memberUserSurfacedPermissions = baseMemberUserSurfacedPermissions;
- } else {
- memberUserSurfacedPermissions = [
- ...baseMemberUserSurfacedPermissions,
- ...baseVoicedUserSurfacedPermissions,
- ];
- }
-
const memberPermissions = getThreadPermissionBlobFromUserSurfacedPermissions(
- memberUserSurfacedPermissions,
+ defaultUserSurfacedPermissions,
threadType,
);
@@ -409,39 +403,23 @@
const openTopLevelDescendantJoinThread =
OPEN_TOP_LEVEL_DESCENDANT + threadPermissions.JOIN_THREAD;
- const subthreadBasePermissions = {
- [threadPermissions.KNOW_OF]: true,
- [threadPermissions.VISIBLE]: true,
- [threadPermissions.CREATE_SIDEBARS]: true,
- [threadPermissions.LEAVE_THREAD]: true,
- [openDescendantKnowOf]: true,
- [openDescendantVisible]: true,
- [openTopLevelDescendantJoinThread]: true,
- [openChildJoinThread]: true,
- };
-
- if (
- thinThreadType === threadTypes.COMMUNITY_OPEN_SUBTHREAD ||
- thinThreadType === threadTypes.COMMUNITY_SECRET_SUBTHREAD
- ) {
+ if (!threadTypeIsCommunityRoot(thinThreadType)) {
const memberPermissions = {
- ...subthreadBasePermissions,
[threadPermissions.VOICED]: true,
+ [threadPermissions.KNOW_OF]: true,
+ [threadPermissions.VISIBLE]: true,
+ [threadPermissions.CREATE_SIDEBARS]: true,
+ [threadPermissions.LEAVE_THREAD]: true,
+ [openDescendantKnowOf]: true,
+ [openDescendantVisible]: true,
+ [openTopLevelDescendantJoinThread]: true,
+ [openChildJoinThread]: true,
};
return {
Members: memberPermissions,
};
}
- if (
- thinThreadType === threadTypes.COMMUNITY_OPEN_ANNOUNCEMENT_SUBTHREAD ||
- thinThreadType === threadTypes.COMMUNITY_SECRET_ANNOUNCEMENT_SUBTHREAD
- ) {
- return {
- Members: subthreadBasePermissions,
- };
- }
-
return getRolePermissionBlobsForCommunityRoot(thinThreadType);
}
diff --git a/lib/types/thread-permission-types.js b/lib/types/thread-permission-types.js
--- a/lib/types/thread-permission-types.js
+++ b/lib/types/thread-permission-types.js
@@ -141,6 +141,28 @@
return ourPrefix;
}
+export const threadPermissionsRequiringVoicedInAnnouncementChannels: $ReadOnlyArray<ThreadPermission> =
+ [
+ threadPermissions.VOICED,
+ threadPermissions.EDIT_ENTRIES,
+ threadPermissions.EDIT_THREAD_NAME,
+ threadPermissions.EDIT_THREAD_DESCRIPTION,
+ threadPermissions.EDIT_THREAD_COLOR,
+ threadPermissions.EDIT_THREAD_AVATAR,
+ threadPermissions.CREATE_SUBCHANNELS,
+ threadPermissions.EDIT_PERMISSIONS,
+ threadPermissions.DELETE_THREAD,
+ threadPermissions.CHANGE_ROLE,
+ threadPermissions.MANAGE_PINS,
+ ];
+
+export const threadPermissionsRemovedForGenesisMembers: $ReadOnlyArray<ThreadPermission> =
+ [
+ threadPermissions.REACT_TO_MESSAGE,
+ threadPermissions.EDIT_MESSAGE,
+ threadPermissions.ADD_MEMBERS,
+ ];
+
// These are the set of user-facing permissions that we display as configurable
// to the user when they are creating a custom role for their given community.
// They are per-community rather than per-thread, so when configured they are
@@ -218,6 +240,7 @@
const descendantTopLevelVoicedInAnnouncementChannels =
threadPermissionPropagationPrefixes.DESCENDANT +
threadPermissionFilterPrefixes.TOP_LEVEL +
+ threadPermissionMembershipPrefixes.MEMBER +
threadPermissions.VOICED_IN_ANNOUNCEMENT_CHANNELS;
const voicedPermissions = new Set([
voicedInAnnouncementChannels,
diff --git a/lib/types/thread-types-enum.js b/lib/types/thread-types-enum.js
--- a/lib/types/thread-types-enum.js
+++ b/lib/types/thread-types-enum.js
@@ -141,6 +141,7 @@
]);
export const announcementThreadTypes: $ReadOnlyArray<number> = Object.freeze([
+ threadTypes.GENESIS,
threadTypes.COMMUNITY_ANNOUNCEMENT_ROOT,
threadTypes.COMMUNITY_OPEN_ANNOUNCEMENT_SUBTHREAD,
threadTypes.COMMUNITY_SECRET_ANNOUNCEMENT_SUBTHREAD,
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Sep 30, 11:17 AM (21 h, 54 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2204879
Default Alt Text
D13068.diff (6 KB)
Attached To
Mode
D13068: [lib] Don't restrict permissions in descendant chats for announcement roots
Attached
Detach File
Event Timeline
Log In to Comment