Permissões MDP
Biblioteca de permissões que define um modelo de Role-Based Access Control (RBAC) usando enums para Roles, Actions, SIDs (recursos) e Effects (Allow / Deny).
Instalação
npm install permissoes-mdp
ou
yarn add permissoes-mdp
Uso
Import
Você pode importar diretamente os enums e funções utilitárias, por exemplo:
import { Role, Sid, Action, canExecuteAction } from 'permissoes-mdp';
const podeCriar = canExecuteAction(Sid.Campeonato, Action.create, Role.ADMIN);
console.log(podeCriar);
Conceitos
- Roles: perfis de usuário (ex.:
SUPER
, ADMIN
, APOSTADOR
, etc.). - SIDs (recurso): quais “entidades” ou “módulos” podem ser protegidos (ex.:
Campeonato
, Partida
, Usuario
). - Actions: ações que podem ser executadas em cada SID (ex.:
create
, delete
, findOne
, etc.). - Effect:
Allow
ou Deny
. Por padrão, esta lib atribui Allow para as ações definidas.
Políticas de Permissão
A biblioteca contém um objeto policies
que mapeia, para cada Role, um array de modules
. Cada module
tem:
Sid
: o recurso protegido.Effect
: em geral Allow
(mas poderia ser Deny
se necessário).Action
: lista das ações que o Role pode executar no Sid.
Exemplo simplificado:
{
[Role.ADMIN]: {
modules: [
{
Sid: Sid.Campeonato,
Effect: Effect.Allow,
Action: [Action.findAll, Action.findOne, Action.create]
},
]
}
}
Funções Principais
getPolicyByRole(role: Role): RolePolicy
Retorna todo o conjunto de regras (RolePolicy
) associado a um determinado role
.
getActionsBySid(sid: Sid, role: Role): SidActionMap[Sid][]
Retorna todas as actions
permitidas (listadas em Effect: Allow
) para um determinado sid
e role
.
canExecuteAction<T extends Sid>(sid: T, action: SidActionMap[T], role: Role): boolean
Verifica se determinado role
pode (retorna true
) ou não pode (retorna false
) executar a action
no sid
solicitado.
É a função mais usada para validar permissões em tempo de execução.
Scripts
No seu projeto, caso tenha clonado o repositório:
- Build:
npm run build
Compila o TypeScript e gera a pasta dist/
. - Test:
npm run test
Executa os testes unitários (via Vitest).
Exemplos
Verificando Permissão
import { Role, Sid, Action, canExecuteAction } from 'permissoes-mdp';
const isAllowed = canExecuteAction(Sid.Partida, Action.encerrar, Role.ASSISTENTE);
if (isAllowed) {
console.log("O usuário com role ASSISTENTE pode encerrar a partida.");
} else {
console.log("Sem permissão para encerrar a partida.");
}
Listando Ações Permitidas
import { getActionsBySid, Sid, Role } from 'permissoes-mdp';
const adminPartidaActions = getActionsBySid(Sid.Partida, Role.ADMIN);
console.log("Ações que ADMIN pode fazer em Partida:", adminPartidaActions);
Contribuição
- Faça um fork do repositório.
- Crie uma nova branch para suas alterações (
git checkout -b feature/minha-feature
). - Abra um Pull Request descrevendo as mudanças propostas.
Licença
Este projeto está licenciado sob a MIT License.