Executando verificação de segurança...
3

[DÚVIDA] Como pensar ao desenvolver um sistema com níveis de acesso?

Estou desenvolvendo um sistema para igreja, um sistema de gestão, e cheguei na parte de níveis de acesso. Pois obviamente alguns colaboladores não podem ter acesso a certas informações ou alterar. Gostaria de saber se existe algum conceito ou qual seria o melhor raciciocínio para desenvolver isso. Se faço no banco de dados, ou somente na aplicação, e etc. Por favor, se souber de algum artigo, conceito ou mesmo livro que possa indicar, seria de grande ajuda. Claro, gostaria que fosse algo que também me servisse para projetos futuros.
Resumindo, seria mais sobre algum padrão, para eu não criar um pequeno monstro complexo demais, para algo que pode ser simples

Carregando publicação patrocinada...
4

Olá! Muito interessante sua pergunta.

Há várias formas de se realizar o controle de acesso aos recursos de uma aplicação, desde as mais simples até as mais complexas. Há diferentes modelos de concessão de permissões também.

Para algumas aplicações, a restrição de um nível de acesso (a tal da "role") pode ser granularizada por ação (criar, ler, alterar ou apagar algo), que poderíamos chamar de "escopo" de autorização. Em outras, você vai encontrar restrições mais "globais", onde um papel de usuário pode acessar determinados conjuntos de recursos definidos pelas regras de negócio.

Os papeis dos usuários podem ser cumulativos (níveis de acesso mais elevados agregam permissões de papeis com menos privilégios) ou exclusivos (os níveis de acesso concedem privilégios distintos e não hierárquicos entre si).

O que e como você vai implementar o controle de acesso depende da modelagem dos casos de uso e da arquitetura do projeto. Por exemplo: em sistemas de gestão, você normalmente encontrará um usuário admin/master, que pode fazer de tudo (cumulativo), e usuários cujos papeis acessam áreas diferentes do sistema (RH, financeiro, suporte etc)(exclusivo).

Conceitualmente falando, tudo isso que falei pode ser resumido em duas siglas: RBAC (Role-Based Access Control) e ABAC (Attribute-Based Access Control).

Honestamente, se for um sistema mais simples para poucos usuários, eu adotaria uma abordagem menos robusta ("less is more"), sem muita granularidade. Agora, se você tem em mente algo maior e mais complexo, talvez você queira ter um controle mais fino de acesso a determinados recursos.

Você pode implementar o controle de acesso pela própria aplicação (se for uma API REST, por exemplo, é possível definir regras de acesso aos recursos expostos pelos endpoints).
Se os papeis de usuário forem fixos, pra mim não vale a pena cadastrá-los em base de dados, mas sim definidos em alguma estrutura de lista ou "enum" (vim do mundo Java, não penso em outra estrutura melhor que essa pra esse fim, rs).
Com relação às permissões, idem. Se elas não forem mutáveis, melhor deixá-las na aplicação mesmo.

Para finalizar: tudo isso vai depender da proposta, da modelagem e do tamanho do seu sistema (a grosso modo). Os conceitos e formas de controle de acesso costumam ser padronizadas. Escolha um modelo e manda bala.

Espero ter ajudado. Boa sorte!

1
1
1

Sim existem alguns padrões relevantes, como Role-Based Access Control e Attribute-Based Access Control e também SSO, OpenID, OAuth.

Utilize clientes e provedores abertos e certificados pela OpenID Connect.