Changeset View
Changeset View
Standalone View
Standalone View
keyserver/src/creators/role-creator.js
// @flow | // @flow | ||||
import { | import { | ||||
type RoleInfo, | type RoleInfo, | ||||
threadPermissions, | threadPermissions, | ||||
threadPermissionPropagationPrefixes, | threadPermissionPropagationPrefixes, | ||||
threadPermissionFilterPrefixes, | threadPermissionFilterPrefixes, | ||||
type ThreadRolePermissionsBlob, | type ThreadRolePermissionsBlob, | ||||
type ThreadType, | type ThreadType, | ||||
threadTypes, | threadTypes, | ||||
} from 'lib/types/thread-types.js'; | } from 'lib/types/thread-types.js'; | ||||
import createIDs from './id-creator.js'; | import createIDs from './id-creator.js'; | ||||
import { dbQuery, SQL } from '../database/database.js'; | import { dbQuery, SQL } from '../database/database.js'; | ||||
type InitialRoles = { | type InitialRoles = { | ||||
default: RoleInfo, | +default: RoleInfo, | ||||
creator: RoleInfo, | +creator: RoleInfo, | ||||
}; | }; | ||||
async function createInitialRolesForNewThread( | async function createInitialRolesForNewThread( | ||||
threadID: string, | threadID: string, | ||||
threadType: ThreadType, | threadType: ThreadType, | ||||
): Promise<InitialRoles> { | ): Promise<InitialRoles> { | ||||
const rolePermissions = getRolePermissionBlobs(threadType); | const rolePermissions = getRolePermissionBlobs(threadType); | ||||
const ids = await createIDs('roles', Object.values(rolePermissions).length); | const ids = await createIDs('roles', Object.values(rolePermissions).length); | ||||
▲ Show 20 Lines • Show All 74 Lines • ▼ Show 20 Lines | const genesisMemberPermissions = { | ||||
[threadPermissions.KNOW_OF]: true, | [threadPermissions.KNOW_OF]: true, | ||||
[threadPermissions.VISIBLE]: true, | [threadPermissions.VISIBLE]: true, | ||||
[openDescendantKnowOf]: true, | [openDescendantKnowOf]: true, | ||||
[openDescendantVisible]: true, | [openDescendantVisible]: true, | ||||
[openTopLevelDescendantJoinThread]: true, | [openTopLevelDescendantJoinThread]: true, | ||||
}; | }; | ||||
const baseMemberPermissions = { | const baseMemberPermissions = { | ||||
...genesisMemberPermissions, | ...genesisMemberPermissions, | ||||
[threadPermissions.REACT_TO_MESSAGE]: true, | |||||
[threadPermissions.LEAVE_THREAD]: true, | [threadPermissions.LEAVE_THREAD]: true, | ||||
[threadPermissions.CREATE_SIDEBARS]: true, | [threadPermissions.CREATE_SIDEBARS]: true, | ||||
[threadPermissions.ADD_MEMBERS]: true, | [threadPermissions.ADD_MEMBERS]: true, | ||||
[openChildJoinThread]: true, | [openChildJoinThread]: true, | ||||
[openChildAddMembers]: true, | [openChildAddMembers]: true, | ||||
}; | }; | ||||
let memberPermissions; | let memberPermissions; | ||||
Show All 31 Lines | const descendantEditPermissions = | ||||
DESCENDANT + threadPermissions.EDIT_PERMISSIONS; | DESCENDANT + threadPermissions.EDIT_PERMISSIONS; | ||||
const descendantRemoveMembers = DESCENDANT + threadPermissions.REMOVE_MEMBERS; | const descendantRemoveMembers = DESCENDANT + threadPermissions.REMOVE_MEMBERS; | ||||
const descendantChangeRole = DESCENDANT + threadPermissions.CHANGE_ROLE; | const descendantChangeRole = DESCENDANT + threadPermissions.CHANGE_ROLE; | ||||
const baseAdminPermissions = { | const baseAdminPermissions = { | ||||
[threadPermissions.KNOW_OF]: true, | [threadPermissions.KNOW_OF]: true, | ||||
[threadPermissions.VISIBLE]: true, | [threadPermissions.VISIBLE]: true, | ||||
[threadPermissions.VOICED]: true, | [threadPermissions.VOICED]: true, | ||||
[threadPermissions.REACT_TO_MESSAGE]: true, | |||||
[threadPermissions.EDIT_ENTRIES]: true, | [threadPermissions.EDIT_ENTRIES]: true, | ||||
[threadPermissions.EDIT_THREAD_NAME]: true, | [threadPermissions.EDIT_THREAD_NAME]: true, | ||||
[threadPermissions.EDIT_THREAD_COLOR]: true, | [threadPermissions.EDIT_THREAD_COLOR]: true, | ||||
[threadPermissions.EDIT_THREAD_DESCRIPTION]: true, | [threadPermissions.EDIT_THREAD_DESCRIPTION]: true, | ||||
[threadPermissions.CREATE_SUBCHANNELS]: true, | [threadPermissions.CREATE_SUBCHANNELS]: true, | ||||
[threadPermissions.CREATE_SIDEBARS]: true, | [threadPermissions.CREATE_SIDEBARS]: true, | ||||
[threadPermissions.ADD_MEMBERS]: true, | [threadPermissions.ADD_MEMBERS]: true, | ||||
[threadPermissions.DELETE_THREAD]: true, | [threadPermissions.DELETE_THREAD]: true, | ||||
Show All 32 Lines | return { | ||||
Admins: adminPermissions, | Admins: adminPermissions, | ||||
}; | }; | ||||
} | } | ||||
function getRolePermissionBlobs(threadType: ThreadType): RolePermissionBlobs { | function getRolePermissionBlobs(threadType: ThreadType): RolePermissionBlobs { | ||||
if (threadType === threadTypes.SIDEBAR) { | if (threadType === threadTypes.SIDEBAR) { | ||||
const memberPermissions = { | const memberPermissions = { | ||||
[threadPermissions.VOICED]: true, | [threadPermissions.VOICED]: true, | ||||
[threadPermissions.REACT_TO_MESSAGE]: true, | |||||
[threadPermissions.EDIT_THREAD_NAME]: true, | [threadPermissions.EDIT_THREAD_NAME]: true, | ||||
[threadPermissions.EDIT_THREAD_COLOR]: true, | [threadPermissions.EDIT_THREAD_COLOR]: true, | ||||
[threadPermissions.EDIT_THREAD_DESCRIPTION]: true, | [threadPermissions.EDIT_THREAD_DESCRIPTION]: true, | ||||
[threadPermissions.ADD_MEMBERS]: true, | [threadPermissions.ADD_MEMBERS]: true, | ||||
[threadPermissions.EDIT_PERMISSIONS]: true, | [threadPermissions.EDIT_PERMISSIONS]: true, | ||||
[threadPermissions.REMOVE_MEMBERS]: true, | [threadPermissions.REMOVE_MEMBERS]: true, | ||||
[threadPermissions.LEAVE_THREAD]: true, | [threadPermissions.LEAVE_THREAD]: true, | ||||
}; | }; | ||||
return { | return { | ||||
Members: memberPermissions, | Members: memberPermissions, | ||||
}; | }; | ||||
} | } | ||||
const openDescendantKnowOf = OPEN_DESCENDANT + threadPermissions.KNOW_OF; | const openDescendantKnowOf = OPEN_DESCENDANT + threadPermissions.KNOW_OF; | ||||
const openDescendantVisible = OPEN_DESCENDANT + threadPermissions.VISIBLE; | const openDescendantVisible = OPEN_DESCENDANT + threadPermissions.VISIBLE; | ||||
const openChildJoinThread = OPEN_CHILD + threadPermissions.JOIN_THREAD; | const openChildJoinThread = OPEN_CHILD + threadPermissions.JOIN_THREAD; | ||||
if (threadType === threadTypes.PRIVATE) { | if (threadType === threadTypes.PRIVATE) { | ||||
const memberPermissions = { | const memberPermissions = { | ||||
[threadPermissions.KNOW_OF]: true, | [threadPermissions.KNOW_OF]: true, | ||||
[threadPermissions.VISIBLE]: true, | [threadPermissions.VISIBLE]: true, | ||||
[threadPermissions.VOICED]: true, | [threadPermissions.VOICED]: true, | ||||
[threadPermissions.REACT_TO_MESSAGE]: true, | |||||
[threadPermissions.EDIT_THREAD_COLOR]: true, | [threadPermissions.EDIT_THREAD_COLOR]: true, | ||||
[threadPermissions.EDIT_THREAD_DESCRIPTION]: true, | [threadPermissions.EDIT_THREAD_DESCRIPTION]: true, | ||||
[threadPermissions.CREATE_SIDEBARS]: true, | [threadPermissions.CREATE_SIDEBARS]: true, | ||||
[threadPermissions.EDIT_ENTRIES]: true, | [threadPermissions.EDIT_ENTRIES]: true, | ||||
[openDescendantKnowOf]: true, | [openDescendantKnowOf]: true, | ||||
[openDescendantVisible]: true, | [openDescendantVisible]: true, | ||||
[openChildJoinThread]: true, | [openChildJoinThread]: true, | ||||
}; | }; | ||||
return { | return { | ||||
Members: memberPermissions, | Members: memberPermissions, | ||||
}; | }; | ||||
} | } | ||||
if (threadType === threadTypes.PERSONAL) { | if (threadType === threadTypes.PERSONAL) { | ||||
return { | return { | ||||
Members: { | Members: { | ||||
[threadPermissions.KNOW_OF]: true, | [threadPermissions.KNOW_OF]: true, | ||||
[threadPermissions.VISIBLE]: true, | [threadPermissions.VISIBLE]: true, | ||||
[threadPermissions.VOICED]: true, | [threadPermissions.VOICED]: true, | ||||
[threadPermissions.REACT_TO_MESSAGE]: true, | |||||
[threadPermissions.EDIT_ENTRIES]: true, | [threadPermissions.EDIT_ENTRIES]: true, | ||||
[threadPermissions.EDIT_THREAD_NAME]: true, | [threadPermissions.EDIT_THREAD_NAME]: true, | ||||
[threadPermissions.EDIT_THREAD_COLOR]: true, | [threadPermissions.EDIT_THREAD_COLOR]: true, | ||||
[threadPermissions.EDIT_THREAD_DESCRIPTION]: true, | [threadPermissions.EDIT_THREAD_DESCRIPTION]: true, | ||||
[threadPermissions.CREATE_SIDEBARS]: true, | [threadPermissions.CREATE_SIDEBARS]: true, | ||||
[openDescendantKnowOf]: true, | [openDescendantKnowOf]: true, | ||||
[openDescendantVisible]: true, | [openDescendantVisible]: true, | ||||
[openChildJoinThread]: true, | [openChildJoinThread]: true, | ||||
}, | }, | ||||
}; | }; | ||||
} | } | ||||
const openTopLevelDescendantJoinThread = | const openTopLevelDescendantJoinThread = | ||||
OPEN_TOP_LEVEL_DESCENDANT + threadPermissions.JOIN_THREAD; | OPEN_TOP_LEVEL_DESCENDANT + threadPermissions.JOIN_THREAD; | ||||
const subthreadBasePermissions = { | const subthreadBasePermissions = { | ||||
[threadPermissions.KNOW_OF]: true, | [threadPermissions.KNOW_OF]: true, | ||||
[threadPermissions.VISIBLE]: true, | [threadPermissions.VISIBLE]: true, | ||||
[threadPermissions.REACT_TO_MESSAGE]: true, | |||||
[threadPermissions.CREATE_SIDEBARS]: true, | [threadPermissions.CREATE_SIDEBARS]: true, | ||||
[threadPermissions.LEAVE_THREAD]: true, | [threadPermissions.LEAVE_THREAD]: true, | ||||
[openDescendantKnowOf]: true, | [openDescendantKnowOf]: true, | ||||
[openDescendantVisible]: true, | [openDescendantVisible]: true, | ||||
[openTopLevelDescendantJoinThread]: true, | [openTopLevelDescendantJoinThread]: true, | ||||
[openChildJoinThread]: true, | [openChildJoinThread]: true, | ||||
}; | }; | ||||
Show All 28 Lines |