fix(P3): Add missing columns to roles DDL
- Added `code` VARCHAR(50) NOT NULL for programmatic use
- Added `is_active` BOOLEAN DEFAULT TRUE
- Added `metadata` JSONB DEFAULT '{}'
- Added indexes for code and is_active
- Added unique constraint for code per tenant
Aligns DDL with role.entity.ts
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
2837480e17
commit
f30b672e92
@ -10,11 +10,13 @@ CREATE TABLE users.roles (
|
||||
tenant_id UUID NOT NULL REFERENCES tenants.tenants(id) ON DELETE CASCADE,
|
||||
|
||||
name VARCHAR(100) NOT NULL,
|
||||
code VARCHAR(50) NOT NULL, -- Short code for programmatic use
|
||||
slug VARCHAR(100) NOT NULL,
|
||||
description TEXT,
|
||||
|
||||
-- System role (cannot be deleted)
|
||||
is_system BOOLEAN DEFAULT FALSE,
|
||||
is_active BOOLEAN DEFAULT TRUE,
|
||||
|
||||
-- Permissions (JSONB array)
|
||||
permissions JSONB DEFAULT '[]'::jsonb,
|
||||
@ -24,13 +26,18 @@ CREATE TABLE users.roles (
|
||||
parent_role_id UUID REFERENCES users.roles(id),
|
||||
level INT DEFAULT 0, -- 0 = lowest, higher = more permissions
|
||||
|
||||
-- Metadata
|
||||
metadata JSONB DEFAULT '{}'::jsonb,
|
||||
|
||||
-- Audit
|
||||
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
||||
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
||||
created_by UUID,
|
||||
|
||||
-- Constraints
|
||||
CONSTRAINT unique_role_code_per_tenant UNIQUE (tenant_id, code),
|
||||
CONSTRAINT unique_role_slug_per_tenant UNIQUE (tenant_id, slug),
|
||||
CONSTRAINT valid_role_code CHECK (code ~ '^[A-Z][A-Z0-9_]*$'),
|
||||
CONSTRAINT valid_role_slug CHECK (slug ~ '^[a-z][a-z0-9_]*$')
|
||||
);
|
||||
|
||||
@ -71,7 +78,9 @@ CREATE TABLE users.permissions (
|
||||
|
||||
-- Indexes
|
||||
CREATE INDEX idx_roles_tenant ON users.roles(tenant_id);
|
||||
CREATE INDEX idx_roles_code ON users.roles(tenant_id, code);
|
||||
CREATE INDEX idx_roles_slug ON users.roles(tenant_id, slug);
|
||||
CREATE INDEX idx_roles_active ON users.roles(tenant_id, is_active) WHERE is_active = TRUE;
|
||||
CREATE INDEX idx_user_roles_user ON users.user_roles(user_id);
|
||||
CREATE INDEX idx_user_roles_role ON users.user_roles(role_id);
|
||||
CREATE INDEX idx_user_roles_tenant ON users.user_roles(tenant_id);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user