GH GambleHub

Motor de papel

1) Modelos de autorização

RBAC (Role-Based Access Control): o sujeito recebe papéis, os papéis estão relacionados com permissões. Apenas controlar, bom para tarefas típicas.
ABAC: a solução depende dos atributos do sujeito, do recurso, da ação e do ambiente (tempo, IP, região, risco). Flexível e escala em regras complexas.
Híbrido RBAC + ABAC: Os papéis oferecem capacidade básica e os atributos estreitam-na.
(Opcional) ReBAC/Relationship-based: Gráfico de relacionamento (proprietário, membro da equipe, delegado), útil para documentários e estruturas org.

2) Arquitetura: PDP/PEP e fluxos

PEP (Policy Enforcement Point): local de aplicação da solução (entrada API, método backend, camada SQL, UI).
PDP (Policy Decision Point): serviço/biblioteca que calcula 'ALLOW/DENY' por políticas e atributos.
PIP (Policy Information Point): fontes de atributos (IDP/perfil, metadados do recurso, screen de risco, geo).
IP (Policy Management Point): interface administrativa/repositório de políticas (versões, rascunhos, publicação).

Fluxo: A consulta PEP cria um contexto o PDP puxa os atributos que faltam (via PIP) calcula a solução o PEP aplica (permitir/proibir/cortar campos) a uma auditoria .

3) Modelo de dados

Entidades (mínimo):
  • `subject` (user/service) с атрибутами: `tenant_id`, `roles`, `departments`, `risk_level`, `mfa_verified`, `scopes`, `claims`.
  • 'resource' com o tipo e os atributos: 'tipo', 'owner _ id', 'tenant _ id', 'classification' (público/confidential), 'region', 'tags'.
  • `action`: `read`, `write`, `delete`, `export`, `approve`, `impersonate` и т. п.
  • `environment`: `time`, `ip`, `device`, `geo`, `auth_strength`, `business_context` (канал, тариф).
Parte RBAC:
  • 'roles (id, tenant _ id, name, inherits [])' - suporte hierarquias e modelos.
  • `permissions(id, resource_type, action, constraint?)`.
  • `role_permissions(role_id, permission_id)`.
  • 'assignments (subject _ id, role _ id, scope)' - scope: global/por projeto/por objeto.
Parte ABAC (política):
  • `policy(id, effect=allow|deny, target: {subject, resource, action}, condition: expr, priority, version, status)`.

4) Princípios decisórios

Deny-overrides: proibições explícitas são mais prioritárias do que permissões.
Least Privilege (PoLP): Execute o mínimo de acesso necessário, amplie através das condições.
Separation of Duties (SoD): impede combinações de papéis/ações (por exemplo, «criou um pagamento» ≠ «apareceu»).
Context-aware: Reforce as exigências para risco elevado (sem MFA, IP suspeito).
Determinism: contexto idêntico → resposta idêntica; registar a versão da política.

5) Pattern de implementação

5. 1 Híbrido RBAC→ABAC (ar condicionado)

Os papéis dão «direito padrão», os termos ABAC limitam:
yaml
Declarative Policy Example
- id: doc_read_own effect: allow target: { action: read, resource. type: document, subject. roles: ["editor","owner"] }
condition: resource. owner_id == subject. id

- id: doc_read_team effect: allow target: { action: read, resource. type: document, subject. roles: ["editor","viewer"] }
condition: subject. team_id in resource. shared_team_ids

- id: doc_read_confidential_external effect: deny target: { action: read, resource. type: document }
condition: resource. classification == "confidential" and subject. tenant_id!= resource. tenant_id priority: 100 # deny high priority

5. 2 Row/Field-Level Security

Nível BD: políticas RLS (por 'tenant _ id', 'owner _ id').
Nível de API: filtre as coleções e disfarce os campos se não houver 'allow: read _ sensitivo _ fields'.

5. 3 Soluções «step-up»

Dependência do poder de autenticação:

allow if action == "export" and subject. mfa_verified == true else deny

5. 4 Permissões temporárias

Bolsas com TTL: 'assignment. expires _ at ', «janelas» de acesso (durante o horário de trabalho da região do recurso).

6) Desempenho e armazenamento em dinheiro

A chave «(subject _ hash, resource _ key, action, policy _ version)» é uma TTL curta.
Atributos do item Edge-dinheiro (claims no token) + lazy-fetch atributos do recurso.
Incorporental invalidation: deficiência por evento (mudança de papel, alteração de política, tradução do recurso para «confidential»).
Verificações batch: para listas - Avalie com «filtro» (policy-predicate pushdown) para não puxar PDP de propósito.

7) Multiplicidade (Multi-tenant)

Cada tabela tem «tenant _ id»; políticas padrão restringem o acesso dentro do aluguel.
Os administradores de aluguel administram apenas os papéis/direitos de renda.
Acesso de aluguel cruzado - exclusivamente através de convites explícitos/shering com deny-override explícito.

8) Administração e ciclo de vida de políticas

Versioning: 'policy. versão 'na resposta PDP, guarde na auditoria.
Ambientes: draft → canary (partes de tráfego/shadow) → prod.
Teste matrix: tabelas de verdade para papéis/atributos essenciais (testes contratuais).
Mudança de gestão: recordações de políticas com revisão de segurança/complacência.

9) Auditoria e observação

Журнал решений: `decision_id`, `subject`, `action`, `resource_ref`, `result`, `matched_policies`, `policy_version`, `attributes_digest`.
Métricas: QPS PDP, Latidão p95, hit-rate em dinheiro, proporção deny, taxa de step-up, incidentes de SoD.
Traçados: span para chamada PDP; correlação com a solicitação de API.
Réplicas: possibilidade de «redesenhar» soluções históricas em uma nova versão da política (safety check).

10) Integração com autenticação e tokens

A identidade é de IdP (OIDC/SAML). Os tokens carregam um mínimo de atributos: «sub», «tenant», «roles», «auth _ time», «amr», «scopes».
Para ABAC, estique os sinais pesados do lado do servidor (PIP) para não inflar o token.
Resource tocens (capability/convites) assinados - para delegações estritamente restritas.

11) Pseudocode PDP (simplificado)

python def decide(subject, resource, action, env, policies):
matched = []
effect = "deny"
Explicit DENYs with priority for p in sorted (policies, key = lambda x: x.priority, reverse = True):
if target_matches(p. target, subject, resource, action):
if eval_condition(p. condition, subject, resource, env):
matched. append(p. id)
if p. effect == "deny":
return Decision("deny", matched, p. version)
Looking for ALLOW for p in policies:
if target_matches(p. target, subject, resource, action):
if eval_condition(p. condition, subject, resource, env):
matched. append(p. id)
effect = "allow"
break return Decision(effect, matched, max_version(matched, policies))

12) Anti-pattern

«Papel = página» (centenas de pequenos papéis sem modelo de objeto).
Armazenamento de políticas somente em código sem versão/auditoria.
Falta de deny-override e SoD → aumentar o risco de fraude.
Listas rígidas de 'user _ id' nas regras (em vez de atributos/relacionamentos).
Não há filtragem no nível de dados (RLS) se o filtro estiver disponível apenas na UI.
Sincronizar os papéis através de script manuais sem eventos ou deficiência de dinheiro.

13) Malas e receitas

13. 1 Camuflagem de nível:


allow read invoice when subject. roles includes "support"
mask fields ["card_last4", "billing_email"] unless subject. role == "finance"

13. 2 Exportar dados apenas com MFA:


allow export if subject. mfa_verified and env. ip in cidr("203. 0. 113. 0/24")

13. 3 SoD:


deny approve_payment if subject. performed_actions includes ("create_payment" within last 24h)

13. 4 Delegação (token limitado):

Capability-token contém 'resource _ id', 'action = [' read ']', 'expires _ at', 'aud'. O PEP verifica a assinatura e o prazo.

14) Testes

Os testes unit de políticas são tabelas de verdade por combinações básicas.
Property-based: geração de atributos aleatórios para encontrar «buracos».
Golden-testes: fixação de um conjunto de soluções para endpoentos críticos.
Canady/Shadow: Avaliação paralela das versões antigas e novas de políticas com o loging de divergências.

15) Capacidades associadas da seção Arquitetura e Protocolos

Autenticação e autorização (OIDC/OAuth2)

Gerenciamento de concordâncias

Tocando e gerenciando chaves

Observabilidade: logs, métricas, traçáveis

Gerenciamento e localização de geo

Criptografia At Rest/In Transit

16) Folha de cheque do arquiteto

1. Os papéis e hierarquias são definidos?
2. Há algum modelo híbrido: papéis + condições em atributos?
3. Implementado PDP com deny-overrides, SoD e step-up?
4. Onde está o PEP? (portaria, backand, BD, UI) - Há uniformidade em todo o lado?
5. As caixas de solução e a deficiência de eventos estão configuradas?
6. As políticas são versionizadas, testadas, divulgadas?
7. Está incluída a auditoria de soluções, métricas e traçados?
8. Suporta multi-arending e RLS/field-masking?
9. Há um runbook sobre incidentes e regressão político?

Conclusão

O RBAC fornece governabilidade, o ABAC, contexto e precisão. Ao combinar papéis com condições de atributo, separar PDP/PEP, implementar a sala de armazenamento, auditoria e teste de políticas, você constrói a permissão como uma capacidade de plataforma, previsível, verificável e escalável para requisitos alimentares e regulatórios.

Contact

Entrar em contacto

Contacte-nos para qualquer questão ou necessidade de apoio.Estamos sempre prontos para ajudar!

Telegram
@Gamble_GC
Iniciar integração

O Email é obrigatório. Telegram ou WhatsApp — opcionais.

O seu nome opcional
Email opcional
Assunto opcional
Mensagem opcional
Telegram opcional
@
Se indicar Telegram — responderemos também por lá.
WhatsApp opcional
Formato: +indicativo e número (ex.: +351XXXXXXXXX).

Ao clicar, concorda com o tratamento dos seus dados.