feat: implementa sistema de responsabilidades e instâncias - Adiciona responsabilidades de Finanças e Imprensa para todas as instâncias - Cria templates genéricos para gerenciamento de instâncias - Implementa sistema de permissões baseado em RBAC - Adiciona status de Aspirante com avaliação obrigatória - Atualiza documentação com novas regras e responsabilidades - Cria testes para validação das permissões - Adiciona migração para novos campos no banco de dados
This commit is contained in:
152
sql/rbac_tables.sql
Normal file
152
sql/rbac_tables.sql
Normal file
@@ -0,0 +1,152 @@
|
||||
-- Tabela de roles
|
||||
CREATE TABLE IF NOT EXISTS roles (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
nome VARCHAR(50) NOT NULL UNIQUE,
|
||||
nivel INTEGER NOT NULL,
|
||||
descricao TEXT
|
||||
);
|
||||
|
||||
-- Tabela de permissões
|
||||
CREATE TABLE IF NOT EXISTS permissions (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
nome VARCHAR(50) NOT NULL UNIQUE,
|
||||
descricao TEXT
|
||||
);
|
||||
|
||||
-- Tabela de mapeamento Role-Permission
|
||||
CREATE TABLE IF NOT EXISTS role_permissions (
|
||||
role_id INTEGER NOT NULL,
|
||||
permission_id INTEGER NOT NULL,
|
||||
PRIMARY KEY (role_id, permission_id),
|
||||
FOREIGN KEY (role_id) REFERENCES roles(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (permission_id) REFERENCES permissions(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
-- Tabela de mapeamento User-Role
|
||||
CREATE TABLE IF NOT EXISTS user_roles (
|
||||
user_id INTEGER NOT NULL,
|
||||
role_id INTEGER NOT NULL,
|
||||
PRIMARY KEY (user_id, role_id),
|
||||
FOREIGN KEY (user_id) REFERENCES usuarios(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (role_id) REFERENCES roles(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
-- Inserir roles básicas
|
||||
INSERT OR IGNORE INTO roles (nome, nivel, descricao) VALUES
|
||||
('Militante Básico', 1, 'Militante com permissões básicas'),
|
||||
('Secretário de Célula', 2, 'Responsável por uma célula'),
|
||||
('Membro de Setor', 3, 'Membro de um setor'),
|
||||
('Secretário de Setor', 4, 'Responsável por um setor'),
|
||||
('Membro de CR', 5, 'Membro de um Comitê Regional'),
|
||||
('Secretário de CR', 6, 'Responsável por um Comitê Regional'),
|
||||
('Membro do CC', 7, 'Membro do Comitê Central'),
|
||||
('Secretário Geral', 8, 'Secretário Geral ou de Organização do CC');
|
||||
|
||||
-- Inserir permissões básicas
|
||||
INSERT OR IGNORE INTO permissions (nome, descricao) VALUES
|
||||
-- Permissões básicas
|
||||
('view_own_data', 'Visualizar próprios dados'),
|
||||
('edit_own_data', 'Editar próprios dados'),
|
||||
('view_cell_data', 'Visualizar dados da célula'),
|
||||
('create_militant', 'Criar novos militantes'),
|
||||
|
||||
-- Permissões de célula
|
||||
('manage_cell_members', 'Gerenciar membros da célula'),
|
||||
('create_cell_member', 'Criar membros na célula'),
|
||||
('view_cell_reports', 'Visualizar relatórios da célula'),
|
||||
|
||||
-- Permissões de setor
|
||||
('manage_sector_cells', 'Gerenciar células do setor'),
|
||||
('create_sector_cell', 'Criar células no setor'),
|
||||
('view_sector_reports', 'Visualizar relatórios do setor'),
|
||||
|
||||
-- Permissões de CR
|
||||
('manage_cr_sectors', 'Gerenciar setores do CR'),
|
||||
('create_cr_sector', 'Criar setores no CR'),
|
||||
('view_cr_reports', 'Visualizar relatórios do CR'),
|
||||
|
||||
-- Permissões de CC
|
||||
('manage_cc_crs', 'Gerenciar CRs'),
|
||||
('create_cc_cr', 'Criar CRs'),
|
||||
('view_cc_reports', 'Visualizar relatórios nacionais'),
|
||||
('system_config', 'Configurar sistema');
|
||||
|
||||
-- Mapear permissões para roles
|
||||
-- Militante Básico
|
||||
INSERT OR IGNORE INTO role_permissions (role_id, permission_id)
|
||||
SELECT r.id, p.id
|
||||
FROM roles r, permissions p
|
||||
WHERE r.nome = 'Militante Básico'
|
||||
AND p.nome IN ('view_own_data', 'edit_own_data', 'view_cell_data');
|
||||
|
||||
-- Secretário de Célula
|
||||
INSERT OR IGNORE INTO role_permissions (role_id, permission_id)
|
||||
SELECT r.id, p.id
|
||||
FROM roles r, permissions p
|
||||
WHERE r.nome = 'Secretário de Célula'
|
||||
AND p.nome IN ('view_own_data', 'edit_own_data', 'view_cell_data',
|
||||
'manage_cell_members', 'create_cell_member', 'view_cell_reports',
|
||||
'create_militant');
|
||||
|
||||
-- Membro de Setor
|
||||
INSERT OR IGNORE INTO role_permissions (role_id, permission_id)
|
||||
SELECT r.id, p.id
|
||||
FROM roles r, permissions p
|
||||
WHERE r.nome = 'Membro de Setor'
|
||||
AND p.nome IN ('view_own_data', 'edit_own_data', 'view_cell_data',
|
||||
'manage_cell_members', 'create_cell_member', 'view_cell_reports',
|
||||
'view_sector_reports', 'create_militant');
|
||||
|
||||
-- Secretário de Setor
|
||||
INSERT OR IGNORE INTO role_permissions (role_id, permission_id)
|
||||
SELECT r.id, p.id
|
||||
FROM roles r, permissions p
|
||||
WHERE r.nome = 'Secretário de Setor'
|
||||
AND p.nome IN ('view_own_data', 'edit_own_data', 'view_cell_data',
|
||||
'manage_cell_members', 'create_cell_member', 'view_cell_reports',
|
||||
'view_sector_reports', 'manage_sector_cells', 'create_sector_cell',
|
||||
'create_militant');
|
||||
|
||||
-- Membro de CR
|
||||
INSERT OR IGNORE INTO role_permissions (role_id, permission_id)
|
||||
SELECT r.id, p.id
|
||||
FROM roles r, permissions p
|
||||
WHERE r.nome = 'Membro de CR'
|
||||
AND p.nome IN ('view_own_data', 'edit_own_data', 'view_cell_data',
|
||||
'manage_cell_members', 'create_cell_member', 'view_cell_reports',
|
||||
'view_sector_reports', 'manage_sector_cells', 'create_sector_cell',
|
||||
'view_cr_reports', 'create_militant');
|
||||
|
||||
-- Secretário de CR
|
||||
INSERT OR IGNORE INTO role_permissions (role_id, permission_id)
|
||||
SELECT r.id, p.id
|
||||
FROM roles r, permissions p
|
||||
WHERE r.nome = 'Secretário de CR'
|
||||
AND p.nome IN ('view_own_data', 'edit_own_data', 'view_cell_data',
|
||||
'manage_cell_members', 'create_cell_member', 'view_cell_reports',
|
||||
'view_sector_reports', 'manage_sector_cells', 'create_sector_cell',
|
||||
'view_cr_reports', 'manage_cr_sectors', 'create_cr_sector',
|
||||
'create_militant');
|
||||
|
||||
-- Membro do CC
|
||||
INSERT OR IGNORE INTO role_permissions (role_id, permission_id)
|
||||
SELECT r.id, p.id
|
||||
FROM roles r, permissions p
|
||||
WHERE r.nome = 'Membro do CC'
|
||||
AND p.nome IN ('view_own_data', 'edit_own_data', 'view_cell_data',
|
||||
'manage_cell_members', 'create_cell_member', 'view_cell_reports',
|
||||
'view_sector_reports', 'manage_sector_cells', 'create_sector_cell',
|
||||
'view_cr_reports', 'manage_cr_sectors', 'create_cr_sector',
|
||||
'view_cc_reports', 'create_militant');
|
||||
|
||||
-- Secretário Geral
|
||||
INSERT OR IGNORE INTO role_permissions (role_id, permission_id)
|
||||
SELECT r.id, p.id
|
||||
FROM roles r, permissions p
|
||||
WHERE r.nome = 'Secretário Geral'
|
||||
AND p.nome IN ('view_own_data', 'edit_own_data', 'view_cell_data',
|
||||
'manage_cell_members', 'create_cell_member', 'view_cell_reports',
|
||||
'view_sector_reports', 'manage_sector_cells', 'create_sector_cell',
|
||||
'view_cr_reports', 'manage_cr_sectors', 'create_cr_sector',
|
||||
'view_cc_reports', 'manage_cc_crs', 'create_cc_cr',
|
||||
'system_config', 'create_militant');
|
||||
Reference in New Issue
Block a user