-- ============================================================ -- Cotizador Walmart Connect - Control de acceso por usuario -- GomezLee Marketing -- ============================================================ -- Script completo para una instalación nueva. -- Si la tabla YA existe, para agregar únicamente el permiso del -- Tarifario usa SUPABASE-PERMISO-TARIFARIO.sql. create table if not exists public.cotizador_wmc_access ( email text primary key, full_name text not null, is_active boolean not null default true, can_use_tarifario boolean not null default false, created_at timestamptz not null default now(), constraint cotizador_wmc_access_email_normalized_chk check (email = lower(btrim(email))), constraint cotizador_wmc_access_glm_domain_chk check (email like '%@gomezleemarketing.com') ); -- Si esta tabla fue creada con una versión anterior, agrega la columna nueva. alter table public.cotizador_wmc_access add column if not exists can_use_tarifario boolean not null default false; comment on table public.cotizador_wmc_access is 'Usuarios autorizados para ingresar al Cotizador Walmart Connect.'; comment on column public.cotizador_wmc_access.is_active is 'true = acceso general permitido; false = acceso general revocado.'; comment on column public.cotizador_wmc_access.can_use_tarifario is 'true = puede visualizar/utilizar el módulo Tarifario; false = no tiene acceso al módulo.'; -- RLS: el navegador solo puede comprobar SU PROPIO acceso y únicamente -- cuando la fila está activa. No puede leer usuarios ajenos ni modificar la tabla. alter table public.cotizador_wmc_access enable row level security; revoke all on table public.cotizador_wmc_access from anon; revoke insert, update, delete, truncate, references, trigger on table public.cotizador_wmc_access from authenticated; grant select on table public.cotizador_wmc_access to authenticated; drop policy if exists "cotizador_wmc_read_own_active_access" on public.cotizador_wmc_access; create policy "cotizador_wmc_read_own_active_access" on public.cotizador_wmc_access for select to authenticated using ( is_active = true and email = lower(coalesce((select auth.jwt() ->> 'email'), '')) ); -- Usuarios autorizados iniciales. -- El permiso de Tarifario queda false por defecto y se administra por separado. insert into public.cotizador_wmc_access (email, full_name, is_active) values ('iaracena@gomezleemarketing.com', 'Isaac Aracena', true), ('lmatos@gomezleemarketing.com', 'Luis Matos', true), ('ethen@gomezleemarketing.com', 'Eidan Then', true), ('mgomez@gomezleemarketing.com', 'Máximo Gómez', true), ('jgomez@gomezleemarketing.com', 'José Leopoldo Gómez', true), ('wlopez@gomezleemarketing.com', 'William Lopez', true) on conflict (email) do update set full_name = excluded.full_name; -- ============================================================ -- EJEMPLOS DE ADMINISTRACIÓN (NO es necesario ejecutarlos ahora) -- ============================================================ -- QUITAR ACCESO GENERAL sin borrar el usuario: -- update public.cotizador_wmc_access -- set is_active = false -- where email = 'usuario@gomezleemarketing.com'; -- VOLVER A DAR ACCESO GENERAL: -- update public.cotizador_wmc_access -- set is_active = true -- where email = 'usuario@gomezleemarketing.com'; -- DAR ACCESO AL TARIFARIO: -- update public.cotizador_wmc_access -- set can_use_tarifario = true -- where email = 'usuario@gomezleemarketing.com'; -- QUITAR ACCESO AL TARIFARIO: -- update public.cotizador_wmc_access -- set can_use_tarifario = false -- where email = 'usuario@gomezleemarketing.com'; -- DAR ACCESO GENERAL A UNA PERSONA NUEVA: -- insert into public.cotizador_wmc_access (email, full_name, is_active) -- values ('usuario@gomezleemarketing.com', 'Nombre Apellido', true) -- on conflict (email) do update -- set full_name = excluded.full_name, is_active = true; -- ELIMINAR COMPLETAMENTE UN REGISTRO: -- delete from public.cotizador_wmc_access -- where email = 'usuario@gomezleemarketing.com';