Sistema de Permissões

Controle de Acesso e Segurança

Sistema de Permissões

Controle granular de acesso e segurança

"Tudo posso naquele que me fortalece"

Filipenses 4:13

Visão Geral

O sistema de permissões do CBAV utiliza o pacote Spatie Laravel Permission para fornecer controle granular de acesso. Permite definir roles, permissões e atribuir acesso específico a cada usuário do sistema.

Roles

Funções e responsabilidades

Permissões

Controle granular de acesso

Segurança

Proteção de dados

Roles (Funções)

Funções Principais

Super Admin

Acesso total ao sistema

  • Todas as permissões
  • Gestão de usuários
  • Configurações do sistema
  • Logs e auditoria

Admin

Administrador do sistema

  • Gestão de membros
  • Sistema financeiro
  • Relatórios
  • Configurações básicas

Secretário

Gestão administrativa

  • Cadastro de membros
  • Gestão de eventos
  • Relatórios básicos
  • Comunicações

Membro

Usuário comum

  • Visualizar perfil
  • Participar de eventos
  • Acessar EBD
  • Fazer doações

Permissões

Permissões Granulares

Gestão de Membros

  • members.view
  • members.create
  • members.edit
  • members.delete
  • members.export
  • members.reports
  • members.birthdays
  • members.ministries

Sistema Financeiro

  • finance.view
  • finance.create
  • finance.edit
  • finance.delete
  • finance.reports
  • finance.settings
  • finance.export
  • finance.campaigns

EBD Digital

  • ebd.view
  • ebd.create
  • ebd.edit
  • ebd.delete
  • ebd.professors
  • ebd.students
  • ebd.certificates
  • ebd.reports

Implementação

Código de Implementação

Verificar Permissões

// Verificar se usuário tem permissão
if (auth()->user()->can('members.create')) {
    // Usuário pode criar membros
}

// Verificar se usuário tem role
if (auth()->user()->hasRole('admin')) {
    // Usuário é admin
}

// Verificar múltiplas permissões
if (auth()->user()->hasAnyPermission(['members.create', 'members.edit'])) {
    // Usuário pode criar ou editar membros
}

Middleware de Permissão

// No arquivo de rotas
Route::middleware(['auth', 'permission:members.view'])->group(function () {
    Route::get('/members', [MemberController::class, 'index']);
});

// Middleware personalizado
Route::middleware(['auth', 'role:admin'])->group(function () {
    Route::get('/admin', [AdminController::class, 'index']);
});

Blade Templates

@can('members.create')
    
        Criar Membro
    
@endcan

@role('admin')
    
@endrole @hasanyrole('admin|secretary')
@endhasanyrole

Estrutura do Banco

Tabelas de Permissão

Tabela de Roles

CREATE TABLE roles (
    id BIGINT PRIMARY KEY,
    name VARCHAR(255) UNIQUE NOT NULL,
    guard_name VARCHAR(255) DEFAULT 'web',
    created_at TIMESTAMP,
    updated_at TIMESTAMP
);

Tabela de Permissões

CREATE TABLE permissions (
    id BIGINT PRIMARY KEY,
    name VARCHAR(255) UNIQUE NOT NULL,
    guard_name VARCHAR(255) DEFAULT 'web',
    created_at TIMESTAMP,
    updated_at TIMESTAMP
);

Tabela de Relacionamento

CREATE TABLE model_has_roles (
    role_id BIGINT,
    model_type VARCHAR(255),
    model_id BIGINT,
    PRIMARY KEY (role_id, model_id, model_type)
);

CREATE TABLE model_has_permissions (
    permission_id BIGINT,
    model_type VARCHAR(255),
    model_id BIGINT,
    PRIMARY KEY (permission_id, model_id, model_type)
);

Comandos Artisan

Comandos de Permissão

Criar Roles

# Criar role
php artisan permission:create-role admin

# Criar permissão
php artisan permission:create-permission members.create

# Atribuir permissão a role
php artisan permission:assign-permission members.create admin

# Atribuir role a usuário
php artisan permission:assign-role admin user@email.com

Verificar Permissões

# Listar roles
php artisan permission:show-roles

# Listar permissões
php artisan permission:show-permissions

# Verificar usuário
php artisan permission:show-user user@email.com

# Cache de permissões
php artisan permission:cache-reset

Boas Práticas de Segurança

Recomendações de Segurança

Princípio do Menor Privilégio

  • Conceder apenas permissões necessárias
  • Revisar permissões regularmente
  • Remover permissões não utilizadas
  • Monitorar atividades suspeitas

Auditoria e Logs

  • Registrar todas as ações
  • Monitorar tentativas de acesso
  • Alertas de segurança
  • Backup de configurações