template-saas-database-v2/ddl/schemas/portfolio/04-rls.sql
Adrian Flores Cortes a3f354528a [SAAS-019] feat: Add Portfolio module DDL
- Schema creation and grants
- Enums: product_type, product_status, price_type, attribute_type
- Tables: categories, products, variants, prices
- RLS policies for tenant isolation
- Performance indexes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 05:43:02 -06:00

86 lines
3.3 KiB
SQL

-- ============================================
-- TEMPLATE-SAAS: Portfolio Row Level Security
-- Version: 1.0.0
-- Module: SAAS-019
-- ============================================
-- ============================================
-- Enable RLS on all tables
-- ============================================
ALTER TABLE portfolio.categories ENABLE ROW LEVEL SECURITY;
ALTER TABLE portfolio.products ENABLE ROW LEVEL SECURITY;
ALTER TABLE portfolio.variants ENABLE ROW LEVEL SECURITY;
ALTER TABLE portfolio.prices ENABLE ROW LEVEL SECURITY;
-- ============================================
-- Categories Policies
-- ============================================
CREATE POLICY categories_tenant_isolation ON portfolio.categories
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
CREATE POLICY categories_insert ON portfolio.categories
FOR INSERT
WITH CHECK (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
CREATE POLICY categories_update ON portfolio.categories
FOR UPDATE
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
CREATE POLICY categories_delete ON portfolio.categories
FOR DELETE
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
-- ============================================
-- Products Policies
-- ============================================
CREATE POLICY products_tenant_isolation ON portfolio.products
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
CREATE POLICY products_insert ON portfolio.products
FOR INSERT
WITH CHECK (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
CREATE POLICY products_update ON portfolio.products
FOR UPDATE
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
CREATE POLICY products_delete ON portfolio.products
FOR DELETE
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
-- ============================================
-- Variants Policies
-- ============================================
CREATE POLICY variants_tenant_isolation ON portfolio.variants
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
CREATE POLICY variants_insert ON portfolio.variants
FOR INSERT
WITH CHECK (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
CREATE POLICY variants_update ON portfolio.variants
FOR UPDATE
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
CREATE POLICY variants_delete ON portfolio.variants
FOR DELETE
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
-- ============================================
-- Prices Policies
-- ============================================
CREATE POLICY prices_tenant_isolation ON portfolio.prices
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
CREATE POLICY prices_insert ON portfolio.prices
FOR INSERT
WITH CHECK (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
CREATE POLICY prices_update ON portfolio.prices
FOR UPDATE
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
CREATE POLICY prices_delete ON portfolio.prices
FOR DELETE
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);