CanCanCan

· Padrão API
Juan Kalleo
Juan Kalleo
Backend/API
This page hasn't been translated to English yet — showing the original Portuguese content.

O que é

Biblioteca de autorização pra Rails — define o que um usuário pode fazer através de uma classe Ability, e expõe authorize! (bloqueia se não puder) e accessible_by (filtra uma query só pro que o usuário pode ver).

Por que essa

A biblioteca de autorização mais madura do ecossistema Rails, mas o que realmente importa aqui não é a lib em si — é como este projeto a usa: Ability não hardcoda can :manage, Model por model, calcula em runtime a partir de papel/permissão cadastrados no banco. Ver Autorização pro funcionamento completo (cálculo de permissão, escopo por tenant, verbo em português).

Versão

cancancan (3.6.1)Gemfile.lock.

Como importar

# Gemfile
gem "cancancan"
# app/controllers/application_controller.rb
def current_ability
  @current_ability ||= Ability.new(current_user)
end

Exemplo real

Uso num controller (app/controllers/api/v1/admin/a_papeis_controller.rb):

def index
  authorize! :CONSULTAR, APapel
  scope = APapel::List.new(params: params, ability: current_ability).call
  render_paginated_result(scope, success_message: "Papeis listados com sucesso")
end

Onde usar no projeto

authorize! em todo controller admin, antes de qualquer leitura/escrita; accessible_by(ability) em todo */list.rb (ver Filtros e busca). CanCan::AccessDenied (quando authorize! nega) é capturado pelo mapa central de erro, vira 403 no envelope padrão — nenhum controller trata essa exceção à mão.