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:
165
docs/README.md
Normal file
165
docs/README.md
Normal file
@@ -0,0 +1,165 @@
|
||||
# Sistema de Controle OCI
|
||||
|
||||
## Hierarquia e Permissões
|
||||
|
||||
### Níveis de Acesso
|
||||
|
||||
1. **Militante Básico**
|
||||
- Pode ver apenas os membros da sua própria célula
|
||||
- Não pode alterar níveis de outros usuários
|
||||
|
||||
2. **Secretário de Célula**
|
||||
- Pode ver e gerenciar apenas os membros da sua célula
|
||||
- Não pode alterar níveis de outros usuários
|
||||
|
||||
3. **Membro de Setor**
|
||||
- Pode ver apenas os dados do setor ao qual pertence
|
||||
- Não pode alterar níveis de outros usuários
|
||||
|
||||
4. **Secretário de Setor**
|
||||
- Pode ver e gerenciar todos os dados do seu setor
|
||||
- Pode alterar níveis de militantes do setor, transformando-os em secretários
|
||||
- Não pode alterar níveis de membros de outros setores
|
||||
|
||||
5. **Membro de CR**
|
||||
- Pode ver apenas os dados do CR ao qual pertence
|
||||
- Não pode alterar níveis de outros usuários
|
||||
|
||||
6. **Secretário de CR**
|
||||
- Pode ver e gerenciar todos os dados do seu CR
|
||||
- Pode alterar níveis de membros do CR
|
||||
- Não pode alterar níveis de membros de outros CRs
|
||||
|
||||
7. **Membro do CC**
|
||||
- Pode ver todos os dados do sistema
|
||||
- Não pode alterar níveis de outros usuários
|
||||
|
||||
8. **Secretário Geral e Secretário de Organização**
|
||||
- Pode ver todos os dados do sistema
|
||||
- Pode alterar níveis de qualquer usuário em qualquer instância
|
||||
|
||||
### Regras de Visualização
|
||||
|
||||
- Cada militante só pode ver os membros da sua própria célula
|
||||
- Membros de setor só veem dados do setor ao qual pertencem
|
||||
- Membros de CR só veem informações do CR ao qual pertencem
|
||||
- Membros do CC podem ver todas as informações do sistema
|
||||
|
||||
### Regras de Edição
|
||||
|
||||
- Apenas o Secretário Geral e o Secretário de Organização podem alterar níveis em todas as instâncias
|
||||
- Secretários de CR podem alterar níveis apenas dentro do seu CR
|
||||
- Secretários de Setor podem alterar níveis apenas dentro do seu setor, transformando militantes em secretários
|
||||
- Outros níveis não podem alterar níveis de outros usuários
|
||||
|
||||
## Responsabilidades
|
||||
|
||||
O sistema suporta as seguintes responsabilidades para militantes:
|
||||
|
||||
- Militante Básico (1)
|
||||
- Secretário de Célula (2)
|
||||
- Secretário de Setor (4)
|
||||
- Secretário de CR (8)
|
||||
- Secretário de CC (16)
|
||||
- Secretário Geral (32)
|
||||
- Quadro-Orientador (64)
|
||||
- Responsável de Finanças (256)
|
||||
- Responsável de Imprensa (512)
|
||||
|
||||
### Status de Aspirante
|
||||
|
||||
Todo novo militante começa como Aspirante. Este status tem as seguintes características:
|
||||
|
||||
1. **Duração Mínima**: O status de Aspirante deve ser mantido por pelo menos 3 meses após a integração do militante.
|
||||
|
||||
2. **Avaliação Obrigatória**: Para remover o status de Aspirante, é necessário:
|
||||
- Ter passado o período mínimo de 3 meses
|
||||
- Registrar uma avaliação detalhada da atuação do militante durante este período
|
||||
|
||||
3. **Quem pode Avaliar**: A avaliação e remoção do status de Aspirante pode ser feita por:
|
||||
- Secretário Geral
|
||||
- Secretário de Organização
|
||||
- Secretários de CR (para militantes de seu CR)
|
||||
- Secretários de Setor (para militantes de seu setor)
|
||||
|
||||
4. **Registro da Avaliação**: A avaliação deve incluir:
|
||||
- Análise da participação do militante nas atividades
|
||||
- Desenvolvimento político e organizativo
|
||||
- Pontos fortes e aspectos a melhorar
|
||||
- Recomendações para o desenvolvimento futuro
|
||||
|
||||
5. **Histórico**: O sistema mantém registro de:
|
||||
- Data de início do período como Aspirante
|
||||
- Data da avaliação
|
||||
- Texto completo da avaliação
|
||||
|
||||
O Quadro-Orientador é uma responsabilidade especial que pode ser atribuída a militantes em qualquer nível hierárquico, incluindo membros de CR e CC. Esta responsabilidade indica que o militante tem a função de orientar e apoiar outros militantes em sua formação política e organizativa.
|
||||
|
||||
A atribuição da responsabilidade de Quadro-Orientador pode ser feita por:
|
||||
- Secretário Geral
|
||||
- Secretário de Organização
|
||||
- Secretários de CR (para militantes de seu CR)
|
||||
- Secretários de Setor (para militantes de seu setor)
|
||||
|
||||
### Responsáveis de Finanças e Imprensa
|
||||
|
||||
Cada instância (Célula, Setor, CR e CC) possui três responsáveis:
|
||||
|
||||
1. **Responsável Geral**: Obrigatório para todas as instâncias. É o principal responsável pela instância.
|
||||
|
||||
2. **Responsável de Finanças**: Opcional. Responsável por:
|
||||
- Controle financeiro da instância
|
||||
- Arrecadação de contribuições
|
||||
- Prestação de contas
|
||||
- Planejamento financeiro
|
||||
|
||||
3. **Responsável de Imprensa**: Opcional. Responsável por:
|
||||
- Comunicação externa da instância
|
||||
- Produção de materiais de divulgação
|
||||
- Gestão de redes sociais
|
||||
- Relacionamento com a mídia
|
||||
|
||||
Os responsáveis de finanças e imprensa são designados pelo responsável geral da instância, com aprovação da instância superior.
|
||||
|
||||
## Hierarquia de Instâncias
|
||||
|
||||
1. **Comitê Central (CC)**
|
||||
- Instância máxima da organização
|
||||
- Possui responsável geral, de finanças e de imprensa
|
||||
- Coordena todos os CRs
|
||||
|
||||
2. **Comitê Regional (CR)**
|
||||
- Subordinado ao CC
|
||||
- Possui responsável geral, de finanças e de imprensa
|
||||
- Coordena os setores da sua região
|
||||
|
||||
3. **Setor**
|
||||
- Subordinado ao CR
|
||||
- Possui responsável geral, de finanças e de imprensa
|
||||
- Coordena as células do seu setor
|
||||
|
||||
4. **Célula**
|
||||
- Subordinada ao Setor
|
||||
- Possui responsável geral, de finanças e de imprensa
|
||||
- Unidade básica de organização
|
||||
|
||||
## Permissões
|
||||
|
||||
As permissões no sistema são baseadas nas responsabilidades do militante e na hierarquia das instâncias:
|
||||
|
||||
1. **Visualização**
|
||||
- Militantes básicos veem apenas sua célula
|
||||
- Secretários de célula veem sua célula
|
||||
- Secretários de setor veem seu setor e células
|
||||
- Secretários de CR veem seu CR, setores e células
|
||||
- Secretários de CC veem todos os dados
|
||||
|
||||
2. **Edição**
|
||||
- Cada nível pode gerenciar apenas os níveis abaixo
|
||||
- Responsáveis de finanças e imprensa podem editar apenas suas áreas
|
||||
- Quadros-Orientadores podem avaliar militantes
|
||||
|
||||
3. **Responsabilidades**
|
||||
- Apenas o nível superior pode atribuir responsabilidades
|
||||
- Responsáveis de finanças e imprensa são designados pelo responsável geral
|
||||
- O status de Quadro-Orientador segue regras específicas
|
||||
239
docs/rbac.md
Normal file
239
docs/rbac.md
Normal file
@@ -0,0 +1,239 @@
|
||||
# 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:
|
||||
|
||||
1. **Roles**: Definem os níveis de acesso
|
||||
2. **Permissions**: Definem as ações permitidas
|
||||
3. **Role-Permission Mapping**: Mapeia quais permissões cada role possui
|
||||
4. **User-Role Assignment**: Atribui roles aos usuários
|
||||
|
||||
### Estrutura do Banco de Dados
|
||||
|
||||
```sql
|
||||
-- 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 dados
|
||||
- `edit_own_data`: Editar seus próprios dados
|
||||
- `view_cell_data`: Visualizar dados da célula
|
||||
|
||||
### Permissões de Célula
|
||||
- `manage_cell_members`: Gerenciar membros da célula
|
||||
- `create_cell_member`: Criar novos 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 novas 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 novos setores no CR
|
||||
- `view_cr_reports`: Visualizar relatórios do CR
|
||||
|
||||
### Permissões de CC
|
||||
- `manage_cc_crs`: Gerenciar CRs
|
||||
- `create_cc_cr`: Criar novos CRs
|
||||
- `view_cc_reports`: Visualizar relatórios nacionais
|
||||
- `system_config`: Configurar o sistema
|
||||
|
||||
## Uso no Código
|
||||
|
||||
```python
|
||||
# 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élula
|
||||
- `VIEW_CELL_DATA`: Visualizar dados da célula
|
||||
- `VIEW_CELL_REPORTS`: Visualizar relatórios da célula
|
||||
- `REGISTER_CELL_PAYMENT`: Registrar pagamentos da célula
|
||||
|
||||
- **Tesoureiro(a)**:
|
||||
- `VIEW_CELL_DATA`: Visualizar dados da célula
|
||||
- `VIEW_CELL_REPORTS`: Visualizar relatórios da célula
|
||||
- `REGISTER_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 setor
|
||||
- `VIEW_SECTOR_REPORTS`: Visualizar relatórios do setor
|
||||
- `REGISTER_SECTOR_PAYMENT`: Registrar pagamentos do setor
|
||||
|
||||
- **Tesoureiro(a)**:
|
||||
- `VIEW_SECTOR_REPORTS`: Visualizar relatórios do setor
|
||||
- `REGISTER_SECTOR_PAYMENT`: Registrar pagamentos do setor
|
||||
|
||||
### CR
|
||||
- **Secretário(a)**:
|
||||
- `MANAGE_CR_SECTORS`: Gerenciar setores do CR
|
||||
- `VIEW_CR_REPORTS`: Visualizar relatórios do CR
|
||||
- `REGISTER_CR_PAYMENT`: Registrar pagamentos do CR
|
||||
|
||||
- **Tesoureiro(a)**:
|
||||
- `VIEW_CR_REPORTS`: Visualizar relatórios do CR
|
||||
- `REGISTER_CR_PAYMENT`: Registrar pagamentos do CR
|
||||
|
||||
### CC
|
||||
- **Secretário(a)**:
|
||||
- `MANAGE_CC_CRS`: Gerenciar CRs
|
||||
- `VIEW_CC_REPORTS`: Visualizar relatórios do CC
|
||||
- `REGISTER_CC_PAYMENT`: Registrar pagamentos do CC
|
||||
- `SYSTEM_CONFIG`: Configurar o sistema
|
||||
|
||||
- **Tesoureiro(a)**:
|
||||
- `VIEW_CC_REPORTS`: Visualizar relatórios do CC
|
||||
- `REGISTER_CC_PAYMENT`: Registrar pagamentos do CC
|
||||
|
||||
## Regras de Acesso a Dados
|
||||
|
||||
1. **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
|
||||
|
||||
2. **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:
|
||||
|
||||
1. **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
|
||||
|
||||
2. **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
|
||||
|
||||
3. **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
|
||||
Reference in New Issue
Block a user