7.2 KiB
7.2 KiB
Sistema de Permissões RBAC (Role-Based Access Control)
Níveis de Permissão
O sistema de permissões é hierárquico, onde cada nível herda as permissões do nível anterior. A hierarquia é a seguinte (do menor para o maior nível):
1. Militante Básico
- Acesso apenas aos seus próprios dados
- Visualização de sua célula
- Sem permissões administrativas
2. Secretário de Célula
- Todas as permissões do Militante Básico
- Gerenciamento de militantes da sua célula
- Visualização de dados da célula
- Cadastro de novos militantes na célula
3. Membro de Setor
- Todas as permissões do Secretário de Célula
- Visualização de dados de todas as células do setor
- Acesso a relatórios do setor
4. Secretário de Setor
- Todas as permissões do Membro de Setor
- Gerenciamento de todas as células do setor
- Criação de novas células no setor
- Geração de relatórios do setor
- Gerenciamento de militantes do setor
5. Membro de CR (Comitê Regional)
- Todas as permissões do Secretário de Setor
- Visualização de dados de todos os setores do CR
- Acesso a relatórios do CR
6. Secretário de CR
- Todas as permissões do Membro de CR
- Gerenciamento de todos os setores do CR
- Criação de novos setores no CR
- Geração de relatórios do CR
- Gerenciamento de militantes do CR
7. Membro do CC (Comitê Central)
- Todas as permissões do Secretário de CR
- Visualização de dados de todos os CRs
- Acesso a relatórios nacionais
8. Secretário Geral / Secretário de Organização do CC
- Todas as permissões do Membro do CC
- Gerenciamento de todos os CRs
- Criação de novos CRs
- Geração de relatórios nacionais
- Gerenciamento de todos os militantes
- Configurações do sistema
Implementação Técnica
O sistema RBAC é implementado através de:
- Roles: Definem os níveis de acesso
- Permissions: Definem as ações permitidas
- Role-Permission Mapping: Mapeia quais permissões cada role possui
- User-Role Assignment: Atribui roles aos usuários
Estrutura do Banco de Dados
-- Roles
CREATE TABLE roles (
id INTEGER PRIMARY KEY,
nome VARCHAR(50) UNIQUE NOT NULL,
nivel INTEGER NOT NULL,
descricao TEXT
);
-- Permissions
CREATE TABLE permissions (
id INTEGER PRIMARY KEY,
nome VARCHAR(50) UNIQUE NOT NULL,
descricao TEXT
);
-- Role-Permission Mapping
CREATE TABLE role_permissions (
role_id INTEGER,
permission_id INTEGER,
PRIMARY KEY (role_id, permission_id),
FOREIGN KEY (role_id) REFERENCES roles(id),
FOREIGN KEY (permission_id) REFERENCES permissions(id)
);
-- User-Role Assignment
CREATE TABLE user_roles (
user_id INTEGER,
role_id INTEGER,
PRIMARY KEY (user_id, role_id),
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (role_id) REFERENCES roles(id)
);
Exemplos de Permissões
Permissões Básicas
view_own_data: Visualizar seus próprios dadosedit_own_data: Editar seus próprios dadosview_cell_data: Visualizar dados da célula
Permissões de Célula
manage_cell_members: Gerenciar membros da célulacreate_cell_member: Criar novos membros na célulaview_cell_reports: Visualizar relatórios da célula
Permissões de Setor
manage_sector_cells: Gerenciar células do setorcreate_sector_cell: Criar novas células no setorview_sector_reports: Visualizar relatórios do setor
Permissões de CR
manage_cr_sectors: Gerenciar setores do CRcreate_cr_sector: Criar novos setores no CRview_cr_reports: Visualizar relatórios do CR
Permissões de CC
manage_cc_crs: Gerenciar CRscreate_cc_cr: Criar novos CRsview_cc_reports: Visualizar relatórios nacionaissystem_config: Configurar o sistema
Uso no Código
# Verificar permissão
if user.has_permission('manage_cell_members'):
# Permitir ação
# Verificar nível
if user.has_role_level(3): # Membro de Setor
# Permitir ação
# Verificar hierarquia
if user.is_higher_or_equal_than(other_user):
# Permitir ação
Controle de Acesso Baseado em Funções (RBAC)
Estrutura Hierárquica
O sistema possui uma estrutura hierárquica com os seguintes níveis:
- Célula (base)
- Setor (agrupa células)
- Comitê Regional - CR (agrupa setores)
- Comitê Central - CC (único, agrupa CRs)
Regras de Associação
- Cada militante pertence a apenas uma célula
- Cada célula pertence a apenas um setor
- Cada setor pertence a apenas um CR
- Existe apenas um Comitê Central (CC)
Permissões por Instância
Célula
-
Secretário(a):
MANAGE_CELL_MEMBERS: Gerenciar membros da célulaVIEW_CELL_DATA: Visualizar dados da célulaVIEW_CELL_REPORTS: Visualizar relatórios da célulaREGISTER_CELL_PAYMENT: Registrar pagamentos da célula
-
Tesoureiro(a):
VIEW_CELL_DATA: Visualizar dados da célulaVIEW_CELL_REPORTS: Visualizar relatórios da célulaREGISTER_CELL_PAYMENT: Registrar pagamentos da célula
-
Militante:
VIEW_OWN_DATA: Visualizar apenas seus próprios dados
Setor
-
Secretário(a):
MANAGE_SECTOR_CELLS: Gerenciar células do setorVIEW_SECTOR_REPORTS: Visualizar relatórios do setorREGISTER_SECTOR_PAYMENT: Registrar pagamentos do setor
-
Tesoureiro(a):
VIEW_SECTOR_REPORTS: Visualizar relatórios do setorREGISTER_SECTOR_PAYMENT: Registrar pagamentos do setor
CR
-
Secretário(a):
MANAGE_CR_SECTORS: Gerenciar setores do CRVIEW_CR_REPORTS: Visualizar relatórios do CRREGISTER_CR_PAYMENT: Registrar pagamentos do CR
-
Tesoureiro(a):
VIEW_CR_REPORTS: Visualizar relatórios do CRREGISTER_CR_PAYMENT: Registrar pagamentos do CR
CC
-
Secretário(a):
MANAGE_CC_CRS: Gerenciar CRsVIEW_CC_REPORTS: Visualizar relatórios do CCREGISTER_CC_PAYMENT: Registrar pagamentos do CCSYSTEM_CONFIG: Configurar o sistema
-
Tesoureiro(a):
VIEW_CC_REPORTS: Visualizar relatórios do CCREGISTER_CC_PAYMENT: Registrar pagamentos do CC
Regras de Acesso a Dados
-
Visualização de Dados:
- Militantes podem ver apenas seus próprios dados
- Secretários e tesoureiros podem ver dados de sua instância
- O CC tem acesso a todos os dados
-
Registro de Pagamentos:
- Apenas tesoureiros e secretários podem registrar pagamentos
- O registro é restrito à instância do usuário
- O CC pode registrar pagamentos em qualquer nível
Implementação Técnica
O controle de acesso é implementado através de:
-
Decorators:
@require_login: Verifica se o usuário está logado@require_permission: Verifica se o usuário tem uma permissão específica@require_instance_permission: Verifica permissão em uma instância específica@require_instance_access: Verifica acesso a uma instância específica
-
Verificações de Acesso:
- Cada rota verifica as permissões necessárias
- O acesso é negado se o usuário não tiver as permissões requeridas
- Mensagens de erro são exibidas para o usuário
-
Filtragem de Dados:
- As consultas ao banco de dados são filtradas baseadas nas permissões
- Cada nível hierárquico tem suas próprias regras de acesso