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 @@ -346,17 +346,6 @@ }; } -const nonCommunityVoicedPermissions = { - [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 getRolePermissionBlobs(threadType: ThreadType): RolePermissionBlobs { if (threadTypeIsThick(threadType)) { const thickThreadType = assertThickThreadType(threadType); @@ -371,15 +360,6 @@ if (thinThreadType === 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 { @@ -396,12 +376,7 @@ [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, @@ -417,12 +392,6 @@ [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, @@ -437,8 +406,6 @@ 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, @@ -452,10 +419,8 @@ thinThreadType === threadTypes.COMMUNITY_SECRET_SUBTHREAD ) { const memberPermissions = { - [threadPermissions.REMOVE_MEMBERS]: true, - [threadPermissions.EDIT_PERMISSIONS]: true, ...subthreadBasePermissions, - ...nonCommunityVoicedPermissions, + [threadPermissions.VOICED]: true, }; return { Members: memberPermissions, 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 @@ -150,7 +150,11 @@ userSurfacedPermission: userSurfacedPermissions.EDIT_CALENDAR, }; const editEntries = threadPermissions.EDIT_ENTRIES; -const editCalendarPermissions = new Set([editEntries]); +const descendantEditEntries = + threadPermissionPropagationPrefixes.DESCENDANT + + threadPermissionMembershipPrefixes.MEMBER + + threadPermissions.EDIT_ENTRIES; +const editCalendarPermissions = new Set([editEntries, descendantEditEntries]); const knowOfSecretChannelsPermission = { title: 'Know of secret channels', @@ -201,16 +205,42 @@ userSurfacedPermission: userSurfacedPermissions.CREATE_AND_EDIT_CHANNELS, }; const editThreadName = threadPermissions.EDIT_THREAD_NAME; +const descendantEditThreadName = + threadPermissionPropagationPrefixes.DESCENDANT + + threadPermissionMembershipPrefixes.MEMBER + + threadPermissions.EDIT_THREAD_NAME; const editThreadDescription = threadPermissions.EDIT_THREAD_DESCRIPTION; +const descendantEditThreadDescription = + threadPermissionPropagationPrefixes.DESCENDANT + + threadPermissionMembershipPrefixes.MEMBER + + threadPermissions.EDIT_THREAD_DESCRIPTION; const editThreadColor = threadPermissions.EDIT_THREAD_COLOR; +const descendantEditThreadColor = + threadPermissionPropagationPrefixes.DESCENDANT + + threadPermissionMembershipPrefixes.MEMBER + + threadPermissions.EDIT_THREAD_COLOR; const createSubchannels = threadPermissions.CREATE_SUBCHANNELS; +const descendantCreateSubchannels = + threadPermissionPropagationPrefixes.DESCENDANT + + threadPermissionFilterPrefixes.TOP_LEVEL + + threadPermissionMembershipPrefixes.MEMBER + + threadPermissions.CREATE_SUBCHANNELS; const editThreadAvatar = threadPermissions.EDIT_THREAD_AVATAR; +const descendantEditThreadAvatar = + threadPermissionPropagationPrefixes.DESCENDANT + + threadPermissionMembershipPrefixes.MEMBER + + threadPermissions.EDIT_THREAD_AVATAR; const createAndEditChannelsPermissions = new Set([ editThreadName, + descendantEditThreadName, editThreadDescription, + descendantEditThreadDescription, editThreadColor, + descendantEditThreadColor, createSubchannels, + descendantCreateSubchannels, editThreadAvatar, + descendantEditThreadAvatar, ]); const deleteChannelsPermission = { @@ -219,18 +249,25 @@ userSurfacedPermission: userSurfacedPermissions.DELETE_CHANNELS, }; const deleteThread = threadPermissions.DELETE_THREAD; -const deleteChannelsPermissions = new Set([deleteThread]); +const descendantDeleteThread = + threadPermissionPropagationPrefixes.DESCENDANT + + threadPermissionMembershipPrefixes.MEMBER + + threadPermissions.DELETE_THREAD; +const deleteChannelsPermissions = new Set([ + deleteThread, + descendantDeleteThread, +]); const addMembersPermission = { title: 'Add members', description: 'Allows members to add other members to channels', userSurfacedPermission: userSurfacedPermissions.ADD_MEMBERS, }; -const childOpenAddMembers = - threadPermissionPropagationPrefixes.CHILD + - threadPermissionFilterPrefixes.OPEN + +const descendantAddMembers = + threadPermissionPropagationPrefixes.DESCENDANT + + threadPermissionMembershipPrefixes.MEMBER + threadPermissions.ADD_MEMBERS; -const addMembersPermissions = new Set([childOpenAddMembers]); +const addMembersPermissions = new Set([descendantAddMembers]); const removeMembersPermission = { title: 'Remove members', @@ -238,7 +275,14 @@ userSurfacedPermission: userSurfacedPermissions.REMOVE_MEMBERS, }; const removeMembers = threadPermissions.REMOVE_MEMBERS; -const removeMembersPermissions = new Set([removeMembers]); +const descendantRemoveMembers = + threadPermissionPropagationPrefixes.DESCENDANT + + threadPermissionMembershipPrefixes.MEMBER + + threadPermissions.REMOVE_MEMBERS; +const removeMembersPermissions = new Set([ + removeMembers, + descendantRemoveMembers, +]); const changeRolePermission = { title: 'Change roles', @@ -254,7 +298,14 @@ userSurfacedPermission: userSurfacedPermissions.EDIT_VISIBILITY, }; const editPermissions = threadPermissions.EDIT_PERMISSIONS; -const editVisibilityPermissions = new Set([editPermissions]); +const descendantEditPermissions = + threadPermissionPropagationPrefixes.DESCENDANT + + threadPermissionMembershipPrefixes.MEMBER + + threadPermissions.EDIT_PERMISSIONS; +const editVisibilityPermissions = new Set([ + editPermissions, + descendantEditPermissions, +]); const managePinsPermission = { title: 'Manage pins', @@ -262,7 +313,11 @@ userSurfacedPermission: userSurfacedPermissions.MANAGE_PINS, }; const managePins = threadPermissions.MANAGE_PINS; -const managePinsPermissions = new Set([managePins]); +const descendantManagePins = + threadPermissionPropagationPrefixes.DESCENDANT + + threadPermissionMembershipPrefixes.MEMBER + + threadPermissions.MANAGE_PINS; +const managePinsPermissions = new Set([managePins, descendantManagePins]); const reactToMessagePermission = { title: 'React to messages', @@ -270,7 +325,14 @@ userSurfacedPermission: userSurfacedPermissions.REACT_TO_MESSAGES, }; const reactToMessage = threadPermissions.REACT_TO_MESSAGE; -const reactToMessagePermissions = new Set([reactToMessage]); +const descendantReactToMessage = + threadPermissionPropagationPrefixes.DESCENDANT + + threadPermissionMembershipPrefixes.MEMBER + + threadPermissions.REACT_TO_MESSAGE; +const reactToMessagePermissions = new Set([ + reactToMessage, + descendantReactToMessage, +]); const editMessagePermission = { title: 'Edit messages', @@ -278,7 +340,11 @@ userSurfacedPermission: userSurfacedPermissions.EDIT_MESSAGES, }; const editMessage = threadPermissions.EDIT_MESSAGE; -const editMessagePermissions = new Set([editMessage]); +const descendantEditMessage = + threadPermissionPropagationPrefixes.DESCENDANT + + threadPermissionMembershipPrefixes.MEMBER + + threadPermissions.EDIT_MESSAGE; +const editMessagePermissions = new Set([editMessage, descendantEditMessage]); const manageInviteLinksPermission = { title: 'Manage invite links', @@ -286,7 +352,14 @@ userSurfacedPermission: userSurfacedPermissions.MANAGE_INVITE_LINKS, }; const manageInviteLinks = threadPermissions.MANAGE_INVITE_LINKS; -const manageInviteLinksPermissions = new Set([manageInviteLinks]); +const descendantManageInviteLinks = + threadPermissionPropagationPrefixes.DESCENDANT + + threadPermissionMembershipPrefixes.MEMBER + + threadPermissions.MANAGE_INVITE_LINKS; +const manageInviteLinksPermissions = new Set([ + manageInviteLinks, + descendantManageInviteLinks, +]); const manageFarcasterChannelTagsPermission = { title: 'Manage Farcaster channel tags',