DROP TABLE IF EXISTS tenant_orders CASCADE;
DROP ROLE IF EXISTS tenant_app;
CREATE ROLE tenant_app LOGIN;
CREATE TABLE tenant_orders (
order_id BIGINT PRIMARY KEY,
tenant_id BIGINT NOT NULL,
order_detail TEXT NOT NULL
);
INSERT INTO tenant_orders VALUES
(1, 101, 'Order A for Tenant 101'),
(2, 101, 'Order B for Tenant 101'),
(3, 102, 'Order A for Tenant 102');
ALTER TABLE tenant_orders ENABLE ROW LEVEL SECURITY;
CREATE POLICY tenant_isolation_policy
ON tenant_orders
FOR ALL
TO tenant_app
USING (
tenant_id =
NULLIF(current_setting('app.tenant_id', true), '')::bigint
)
WITH CHECK (
tenant_id =
NULLIF(current_setting('app.tenant_id', true), '')::bigint
);
GRANT SELECT, INSERT, UPDATE, DELETE
ON tenant_orders
TO tenant_app;