-- RBAC tables CREATE TABLE IF NOT EXISTS permissions ( id BIGSERIAL PRIMARY KEY, code VARCHAR(128) NOT NULL UNIQUE, name VARCHAR(128) NOT NULL, module VARCHAR(64) NOT NULL, description VARCHAR(256), created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); CREATE TABLE IF NOT EXISTS roles ( id BIGSERIAL, tenant_id UUID NOT NULL, name VARCHAR(64) NOT NULL, description VARCHAR(256), is_system BOOLEAN NOT NULL DEFAULT FALSE, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), PRIMARY KEY (id, tenant_id) ); CREATE UNIQUE INDEX IF NOT EXISTS idx_tenant_role_name ON roles(tenant_id, name); CREATE TABLE IF NOT EXISTS role_permissions ( role_id BIGINT NOT NULL, permission_id BIGINT NOT NULL, PRIMARY KEY (role_id, permission_id) ); CREATE TABLE IF NOT EXISTS user_roles ( user_id BIGINT NOT NULL, tenant_id UUID NOT NULL, role_id BIGINT NOT NULL, PRIMARY KEY (user_id, tenant_id) );