-- ============================================================================ -- ROW LEVEL SECURITY POLICIES - ERP Retail/POS -- ============================================================================ -- Version: 1.0.0 -- Fecha: 2026-01-24 -- Descripcion: Politicas RLS para aislamiento por tenant en todas las tablas -- ============================================================================ -- PREREQUISITOS: -- 1. ERP-Core instalado (auth schema con tenants) -- 2. Schema retail creado -- 3. Tablas retail.* creadas -- ============================================================================ -- TABLAS CON TENANT_ID: 16 -- - retail.branches -- - retail.cash_registers -- - retail.pos_sessions -- - retail.pos_orders -- - retail.pos_order_lines -- - retail.pos_payments -- - retail.cash_movements -- - retail.branch_stock -- - retail.stock_transfers -- - retail.stock_transfer_lines -- - retail.product_barcodes -- - retail.promotions -- - retail.promotion_products -- - retail.loyalty_programs -- - retail.loyalty_cards -- - retail.loyalty_transactions -- ============================================================================ -- ============================================================================ -- HABILITAR RLS EN TODAS LAS TABLAS -- ============================================================================ ALTER TABLE retail.branches ENABLE ROW LEVEL SECURITY; ALTER TABLE retail.cash_registers ENABLE ROW LEVEL SECURITY; ALTER TABLE retail.pos_sessions ENABLE ROW LEVEL SECURITY; ALTER TABLE retail.pos_orders ENABLE ROW LEVEL SECURITY; ALTER TABLE retail.pos_order_lines ENABLE ROW LEVEL SECURITY; ALTER TABLE retail.pos_payments ENABLE ROW LEVEL SECURITY; ALTER TABLE retail.cash_movements ENABLE ROW LEVEL SECURITY; ALTER TABLE retail.branch_stock ENABLE ROW LEVEL SECURITY; ALTER TABLE retail.stock_transfers ENABLE ROW LEVEL SECURITY; ALTER TABLE retail.stock_transfer_lines ENABLE ROW LEVEL SECURITY; ALTER TABLE retail.product_barcodes ENABLE ROW LEVEL SECURITY; ALTER TABLE retail.promotions ENABLE ROW LEVEL SECURITY; ALTER TABLE retail.promotion_products ENABLE ROW LEVEL SECURITY; ALTER TABLE retail.loyalty_programs ENABLE ROW LEVEL SECURITY; ALTER TABLE retail.loyalty_cards ENABLE ROW LEVEL SECURITY; ALTER TABLE retail.loyalty_transactions ENABLE ROW LEVEL SECURITY; -- ============================================================================ -- POLITICAS DE AISLAMIENTO POR TENANT -- ============================================================================ -- ----------------------------------------------------------------------------- -- SUCURSALES Y CONFIGURACION -- ----------------------------------------------------------------------------- -- Policy: branches DROP POLICY IF EXISTS tenant_isolation_branches ON retail.branches; CREATE POLICY tenant_isolation_branches ON retail.branches USING (tenant_id = current_setting('app.current_tenant_id', true)::uuid); -- Policy: cash_registers DROP POLICY IF EXISTS tenant_isolation_cash_registers ON retail.cash_registers; CREATE POLICY tenant_isolation_cash_registers ON retail.cash_registers USING (tenant_id = current_setting('app.current_tenant_id', true)::uuid); -- ----------------------------------------------------------------------------- -- PUNTO DE VENTA (RT-001) -- ----------------------------------------------------------------------------- -- Policy: pos_sessions DROP POLICY IF EXISTS tenant_isolation_pos_sessions ON retail.pos_sessions; CREATE POLICY tenant_isolation_pos_sessions ON retail.pos_sessions USING (tenant_id = current_setting('app.current_tenant_id', true)::uuid); -- Policy: pos_orders DROP POLICY IF EXISTS tenant_isolation_pos_orders ON retail.pos_orders; CREATE POLICY tenant_isolation_pos_orders ON retail.pos_orders USING (tenant_id = current_setting('app.current_tenant_id', true)::uuid); -- Policy: pos_order_lines DROP POLICY IF EXISTS tenant_isolation_pos_order_lines ON retail.pos_order_lines; CREATE POLICY tenant_isolation_pos_order_lines ON retail.pos_order_lines USING (tenant_id = current_setting('app.current_tenant_id', true)::uuid); -- Policy: pos_payments DROP POLICY IF EXISTS tenant_isolation_pos_payments ON retail.pos_payments; CREATE POLICY tenant_isolation_pos_payments ON retail.pos_payments USING (tenant_id = current_setting('app.current_tenant_id', true)::uuid); -- Policy: cash_movements DROP POLICY IF EXISTS tenant_isolation_cash_movements ON retail.cash_movements; CREATE POLICY tenant_isolation_cash_movements ON retail.cash_movements USING (tenant_id = current_setting('app.current_tenant_id', true)::uuid); -- ----------------------------------------------------------------------------- -- INVENTARIO MULTI-SUCURSAL (RT-002) -- ----------------------------------------------------------------------------- -- Policy: branch_stock DROP POLICY IF EXISTS tenant_isolation_branch_stock ON retail.branch_stock; CREATE POLICY tenant_isolation_branch_stock ON retail.branch_stock USING (tenant_id = current_setting('app.current_tenant_id', true)::uuid); -- Policy: stock_transfers DROP POLICY IF EXISTS tenant_isolation_stock_transfers ON retail.stock_transfers; CREATE POLICY tenant_isolation_stock_transfers ON retail.stock_transfers USING (tenant_id = current_setting('app.current_tenant_id', true)::uuid); -- Policy: stock_transfer_lines DROP POLICY IF EXISTS tenant_isolation_stock_transfer_lines ON retail.stock_transfer_lines; CREATE POLICY tenant_isolation_stock_transfer_lines ON retail.stock_transfer_lines USING (tenant_id = current_setting('app.current_tenant_id', true)::uuid); -- ----------------------------------------------------------------------------- -- PRODUCTOS RETAIL (RT-003) -- ----------------------------------------------------------------------------- -- Policy: product_barcodes DROP POLICY IF EXISTS tenant_isolation_product_barcodes ON retail.product_barcodes; CREATE POLICY tenant_isolation_product_barcodes ON retail.product_barcodes USING (tenant_id = current_setting('app.current_tenant_id', true)::uuid); -- Policy: promotions DROP POLICY IF EXISTS tenant_isolation_promotions ON retail.promotions; CREATE POLICY tenant_isolation_promotions ON retail.promotions USING (tenant_id = current_setting('app.current_tenant_id', true)::uuid); -- Policy: promotion_products DROP POLICY IF EXISTS tenant_isolation_promotion_products ON retail.promotion_products; CREATE POLICY tenant_isolation_promotion_products ON retail.promotion_products USING (tenant_id = current_setting('app.current_tenant_id', true)::uuid); -- ----------------------------------------------------------------------------- -- CLIENTES Y FIDELIZACION (RT-004) -- ----------------------------------------------------------------------------- -- Policy: loyalty_programs DROP POLICY IF EXISTS tenant_isolation_loyalty_programs ON retail.loyalty_programs; CREATE POLICY tenant_isolation_loyalty_programs ON retail.loyalty_programs USING (tenant_id = current_setting('app.current_tenant_id', true)::uuid); -- Policy: loyalty_cards DROP POLICY IF EXISTS tenant_isolation_loyalty_cards ON retail.loyalty_cards; CREATE POLICY tenant_isolation_loyalty_cards ON retail.loyalty_cards USING (tenant_id = current_setting('app.current_tenant_id', true)::uuid); -- Policy: loyalty_transactions DROP POLICY IF EXISTS tenant_isolation_loyalty_transactions ON retail.loyalty_transactions; CREATE POLICY tenant_isolation_loyalty_transactions ON retail.loyalty_transactions USING (tenant_id = current_setting('app.current_tenant_id', true)::uuid); -- ============================================================================ -- FIN POLITICAS RLS -- Total: 16 tablas con RLS habilitado -- Total: 16 politicas de aislamiento por tenant -- ============================================================================