Files
supabase/apps/studio/components/interfaces/Organization/TeamSettings/TeamSettings.utils.ts
2026-04-01 10:22:37 +02:00

57 lines
1.7 KiB
TypeScript

import { PermissionAction } from '@supabase/shared-types/out/constants'
import type { OrganizationMember } from '@/data/organizations/organization-members-query'
import { doPermissionsCheck, useGetPermissions } from '@/hooks/misc/useCheckPermissions'
import type { Permission, Role } from '@/types'
export const useGetRolesManagementPermissions = (
orgSlug?: string,
roles?: Role[],
permissions?: Permission[]
): { rolesAddable: Number[]; rolesRemovable: Number[] } => {
const { permissions: allPermissions, organizationSlug } = useGetPermissions(
permissions,
orgSlug,
permissions !== undefined && orgSlug !== undefined
)
const rolesAddable: Number[] = []
const rolesRemovable: Number[] = []
if (!roles || !orgSlug) return { rolesAddable, rolesRemovable }
roles.forEach((role: Role) => {
const canAdd = doPermissionsCheck(
allPermissions,
PermissionAction.CREATE,
'auth.subject_roles',
{
resource: { role_id: role.id },
},
organizationSlug
)
if (canAdd) rolesAddable.push(role.id)
const canRemove = doPermissionsCheck(
allPermissions,
PermissionAction.DELETE,
'auth.subject_roles',
{
resource: { role_id: role.id },
},
organizationSlug
)
if (canRemove) rolesRemovable.push(role.id)
})
return { rolesAddable, rolesRemovable }
}
export const hasMultipleOwners = (members: OrganizationMember[] = [], roles: Role[] = []) => {
const membersWhoAreOwners = members.filter((member) => {
const [memberRoleId] = member.role_ids ?? []
const role = roles.find((role: Role) => role.id === memberRoleId)
return role?.name === 'Owner' && !member.invited_at
})
return membersWhoAreOwners.length > 1
}