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 @@ -179,20 +179,12 @@ 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 genesisMemberPermissions = getUniversalCommunityRootPermissionsBlob( + threadTypes.GENESIS, + ); const baseMemberPermissions = { ...genesisMemberPermissions, [threadPermissions.REACT_TO_MESSAGE]: true, @@ -405,6 +397,47 @@ return getRolePermissionBlobsForCommunity(threadType); } +function getUniversalCommunityRootPermissionsBlob( + threadType: ThreadType, +): ThreadRolePermissionsBlob { + const openDescendantKnowOf = DESCENDANT + OPEN + threadPermissions.KNOW_OF; + const openDescendantVoiced = DESCENDANT + OPEN + threadPermissions.VOICED; + const openDescendantVisible = DESCENDANT + OPEN + threadPermissions.VISIBLE; + const openChildJoinThread = CHILD + OPEN + threadPermissions.JOIN_THREAD; + const openTopLevelDescendantJoinThread = + DESCENDANT + OPEN_TOP_LEVEL + threadPermissions.JOIN_THREAD; + + const genesisUniversalCommunityPermissions = { + [threadPermissions.KNOW_OF]: true, + [threadPermissions.VISIBLE]: true, + [openDescendantKnowOf]: true, + [openDescendantVisible]: true, + [openTopLevelDescendantJoinThread]: true, + }; + + const baseUniversalCommunityPermissions = { + ...genesisUniversalCommunityPermissions, + [threadPermissions.JOIN_THREAD]: true, + [threadPermissions.CREATE_SIDEBARS]: true, + [threadPermissions.LEAVE_THREAD]: true, + [openDescendantVoiced]: true, + [openChildJoinThread]: true, + }; + + if (threadType === threadTypes.GENESIS) { + return genesisUniversalCommunityPermissions; + } else if (threadType === threadTypes.COMMUNITY_ANNOUNCEMENT_ROOT) { + return baseUniversalCommunityPermissions; + } else if (threadType === threadTypes.COMMUNITY_ROOT) { + return { + ...baseUniversalCommunityPermissions, + [threadPermissions.VOICED]: true, + }; + } else { + return {}; + } +} + export { permissionLookup, getAllThreadPermissions, @@ -412,4 +445,5 @@ makePermissionsForChildrenBlob, getRoleForPermissions, getRolePermissionBlobs, + getUniversalCommunityRootPermissionsBlob, };