Controle de Acesso e Segurança
Controle granular de acesso e segurança
"Tudo posso naquele que me fortalece"
Filipenses 4:13
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.
Funções e responsabilidades
Controle granular de acesso
Proteção de dados
Acesso total ao sistema
Administrador do sistema
Gestão administrativa
Usuário comum
// 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
}
// 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']);
});
@can('members.create')
Criar Membro
@endcan
@role('admin')
@endrole
@hasanyrole('admin|secretary')
@endhasanyrole
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
);
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
);
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)
);
# 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
# 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