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 @@ -176,23 +176,25 @@ [threadPermissions.ADD_MEMBERS]: true, }; +const openDescendantKnowOf = OPEN_DESCENDANT + threadPermissions.KNOW_OF; +const openDescendantVisible = OPEN_DESCENDANT + threadPermissions.VISIBLE; +const openTopLevelDescendantJoinThread = + OPEN_TOP_LEVEL_DESCENDANT + threadPermissions.JOIN_THREAD; + +const genesisMemberPermissions = { + [threadPermissions.KNOW_OF]: true, + [threadPermissions.VISIBLE]: true, + [openDescendantKnowOf]: true, + [openDescendantVisible]: true, + [openTopLevelDescendantJoinThread]: 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, @@ -318,8 +320,6 @@ }; } - const openDescendantKnowOf = OPEN_DESCENDANT + threadPermissions.KNOW_OF; - const openDescendantVisible = OPEN_DESCENDANT + threadPermissions.VISIBLE; const openChildJoinThread = OPEN_CHILD + threadPermissions.JOIN_THREAD; if (threadType === threadTypes.PRIVATE) { @@ -362,9 +362,6 @@ }; } - const openTopLevelDescendantJoinThread = - OPEN_TOP_LEVEL_DESCENDANT + threadPermissions.JOIN_THREAD; - const subthreadBasePermissions = { [threadPermissions.KNOW_OF]: true, [threadPermissions.VISIBLE]: true, @@ -405,6 +402,35 @@ return getRolePermissionBlobsForCommunity(threadType); } +function getUniversalCommunityRootPermissionsBlob( + threadType: ThreadType, +): ThreadRolePermissionsBlob { + const openDescendantVoiced = DESCENDANT + OPEN + threadPermissions.VOICED; + const openChildJoinThread = CHILD + OPEN + threadPermissions.JOIN_THREAD; + + const baseUniversalCommunityPermissions = { + ...genesisMemberPermissions, + [threadPermissions.JOIN_THREAD]: true, + [threadPermissions.CREATE_SIDEBARS]: true, + [threadPermissions.LEAVE_THREAD]: true, + [openDescendantVoiced]: true, + [openChildJoinThread]: true, + }; + + if (threadType === threadTypes.GENESIS) { + return genesisMemberPermissions; + } 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 +438,5 @@ makePermissionsForChildrenBlob, getRoleForPermissions, getRolePermissionBlobs, + getUniversalCommunityRootPermissionsBlob, };