TeamSettings.utils.ts56 lines · main
1import { PermissionAction } from '@supabase/shared-types/out/constants'
2
3import type { OrganizationMember } from '@/data/organizations/organization-members-query'
4import { doPermissionsCheck, useGetPermissions } from '@/hooks/misc/useCheckPermissions'
5import type { Permission, Role } from '@/types'
6
7export const useGetRolesManagementPermissions = (
8 orgSlug?: string,
9 roles?: Role[],
10 permissions?: Permission[]
11): { rolesAddable: Number[]; rolesRemovable: Number[] } => {
12 const { permissions: allPermissions, organizationSlug } = useGetPermissions(
13 permissions,
14 orgSlug,
15 permissions !== undefined && orgSlug !== undefined
16 )
17
18 const rolesAddable: Number[] = []
19 const rolesRemovable: Number[] = []
20 if (!roles || !orgSlug) return { rolesAddable, rolesRemovable }
21
22 roles.forEach((role: Role) => {
23 const canAdd = doPermissionsCheck(
24 allPermissions,
25 PermissionAction.CREATE,
26 'auth.subject_roles',
27 {
28 resource: { role_id: role.id },
29 },
30 organizationSlug
31 )
32 if (canAdd) rolesAddable.push(role.id)
33
34 const canRemove = doPermissionsCheck(
35 allPermissions,
36 PermissionAction.DELETE,
37 'auth.subject_roles',
38 {
39 resource: { role_id: role.id },
40 },
41 organizationSlug
42 )
43 if (canRemove) rolesRemovable.push(role.id)
44 })
45
46 return { rolesAddable, rolesRemovable }
47}
48
49export const hasMultipleOwners = (members: OrganizationMember[] = [], roles: Role[] = []) => {
50 const membersWhoAreOwners = members.filter((member) => {
51 const [memberRoleId] = member.role_ids ?? []
52 const role = roles.find((role: Role) => role.id === memberRoleId)
53 return role?.name === 'Owner' && !member.invited_at
54 })
55 return membersWhoAreOwners.length > 1
56}