Roadbound-BRR/supabase/migrations/20260326190000_add_org_invites.sql

39 lines
1.8 KiB
SQL

create table if not exists public.organization_invites (
id text primary key default public.gen_hash_id() check (id ~ '^[0-9a-f]{16}$'),
token text not null unique check (token ~ '^[0-9a-f]{24}$'),
organization_id text not null references public.organizations(id) on delete cascade,
created_by uuid not null references auth.users(id) on delete restrict,
role public.organization_role not null default 'member',
max_uses integer not null default 1 check (max_uses > 0),
uses_count integer not null default 0 check (uses_count >= 0),
expires_at timestamptz,
revoked boolean not null default false,
created_at timestamptz not null default now()
);
create index if not exists idx_org_invites_org on public.organization_invites(organization_id);
create index if not exists idx_org_invites_token on public.organization_invites(token);
alter table public.organization_invites enable row level security;
drop policy if exists "organization_invites_select_admins" on public.organization_invites;
create policy "organization_invites_select_admins"
on public.organization_invites
for select
to authenticated
using (public.org_role(organization_id) in ('owner', 'admin'));
drop policy if exists "organization_invites_insert_admins" on public.organization_invites;
create policy "organization_invites_insert_admins"
on public.organization_invites
for insert
to authenticated
with check (public.org_role(organization_id) in ('owner', 'admin'));
drop policy if exists "organization_invites_update_admins" on public.organization_invites;
create policy "organization_invites_update_admins"
on public.organization_invites
for update
to authenticated
using (public.org_role(organization_id) in ('owner', 'admin'))
with check (public.org_role(organization_id) in ('owner', 'admin'));