61 lines
2.2 KiB
MySQL
61 lines
2.2 KiB
MySQL
|
|
-- T0241: Create Role Management Database Models
|
||
|
|
-- Create tables for roles, permissions, user_roles, and role_permissions
|
||
|
|
|
||
|
|
-- Table roles
|
||
|
|
CREATE TABLE IF NOT EXISTS roles (
|
||
|
|
id BIGSERIAL PRIMARY KEY,
|
||
|
|
name VARCHAR(50) UNIQUE NOT NULL,
|
||
|
|
display_name VARCHAR(100) NOT NULL,
|
||
|
|
description TEXT,
|
||
|
|
is_system BOOLEAN DEFAULT FALSE,
|
||
|
|
is_active BOOLEAN DEFAULT TRUE,
|
||
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Table permissions
|
||
|
|
CREATE TABLE IF NOT EXISTS permissions (
|
||
|
|
id BIGSERIAL PRIMARY KEY,
|
||
|
|
name VARCHAR(100) UNIQUE NOT NULL,
|
||
|
|
resource VARCHAR(50) NOT NULL,
|
||
|
|
action VARCHAR(50) NOT NULL,
|
||
|
|
description TEXT,
|
||
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Table user_roles
|
||
|
|
CREATE TABLE IF NOT EXISTS user_roles (
|
||
|
|
id BIGSERIAL PRIMARY KEY,
|
||
|
|
user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||
|
|
role_id BIGINT NOT NULL REFERENCES roles(id) ON DELETE CASCADE,
|
||
|
|
assigned_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
assigned_by BIGINT REFERENCES users(id),
|
||
|
|
expires_at TIMESTAMP,
|
||
|
|
is_active BOOLEAN DEFAULT TRUE,
|
||
|
|
UNIQUE(user_id, role_id)
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Table role_permissions
|
||
|
|
CREATE TABLE IF NOT EXISTS role_permissions (
|
||
|
|
role_id BIGINT NOT NULL REFERENCES roles(id) ON DELETE CASCADE,
|
||
|
|
permission_id BIGINT NOT NULL REFERENCES permissions(id) ON DELETE CASCADE,
|
||
|
|
PRIMARY KEY (role_id, permission_id)
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Indexes
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_user_roles_user_id ON user_roles(user_id);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_user_roles_role_id ON user_roles(role_id);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_role_permissions_role_id ON role_permissions(role_id);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_role_permissions_permission_id ON role_permissions(permission_id);
|
||
|
|
|
||
|
|
-- Seed system roles
|
||
|
|
INSERT INTO roles (name, display_name, description, is_system) VALUES
|
||
|
|
('user', 'Utilisateur', 'Utilisateur standard avec accès de base', true),
|
||
|
|
('artist', 'Artiste', 'Créateur de contenu musical', true),
|
||
|
|
('producer', 'Producteur', 'Producteur musical', true),
|
||
|
|
('label', 'Label', 'Label de musique', true),
|
||
|
|
('moderator', 'Modérateur', 'Modération du contenu', true),
|
||
|
|
('admin', 'Administrateur', 'Administration complète', true)
|
||
|
|
ON CONFLICT (name) DO NOTHING;
|
||
|
|
|