TeamSettings.utils.ts56 lines · main
| 1 | import { PermissionAction } from '@supabase/shared-types/out/constants' |
| 2 | |
| 3 | import type { OrganizationMember } from '@/data/organizations/organization-members-query' |
| 4 | import { doPermissionsCheck, useGetPermissions } from '@/hooks/misc/useCheckPermissions' |
| 5 | import type { Permission, Role } from '@/types' |
| 6 | |
| 7 | export 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 | |
| 49 | export 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 | } |