Olá pessoal,
Estou pensando em desenvolver um site e meu primeiro desafio é bolar o esquema de acesso (veja mer anexo).
Neste esquema pensei em criar um usuário que terá permissao de acesso ao menu do sistema.
O usuário poderá pertencer ao grupo que tbem terá permissão de acesso (neste ponto imagino k terei que percorrer a lista de permissoes pra saber se ele tem acesso ou por permissão direta ou pelo grupo). As permissões de acesso deverão ao meu ver ter um relacionamento com as operações para crud, relatório (as operações podem dar algum rolo :-/ ), etc.
Eu gostaria de sugestões a respeito da minha modelagem, pois pretendo adotar ela como padrão pra aplicar tanto em sistemas web ou desktop.
Obrigado.
Nem sempre uma modelagem se aplica a todos tipos de sistema, cuidado com isso.
As vezes você só precisa de dois tipos de usuário no sistema (Usuário e Admin) e não é necessária tanta complexidade.
Algumas mudanças que sugiro na sua modelagem:
-
Transfome PermissaoOperacao e Operacao em uma tabela só.
Ao invés de uma coluna para cada operação, crie quatro registros: Incluir <Alguma Coisa>, Visualizar<Alguma Coisa>.
Isso torna mais flexível, pois não se limita a 4 verbos.
-
Retire a ligação entre Usuário e PermissaoAcesso. Deixei todas as permissões via GrupoAcesso.
Pode permitir associar um mesmo usuário a vários grupos.
Isso vai tornar mais simples carregar as permissões de cada usuário.
(Sem falar que gerenciar permissão para cada usuário tende a dar muito trabalho)
-
Não cadastraria os menus no banco de dados. Isso tende a ser informação mais estática.
No final ficaria algo mais ou menos assim:
Usuario(id, …) --< UsuarioGrupo(id_usuario,id_grupo) >-- GrupoAcesso(id, …) --< GrupoPermissao(id_grupo, id_permissao) >-- PermissaoAcesso(id, descricao)
Você pode vincular seu menu diretamente ao id de PermissaoAcesso.
Depende muito do que você quer fazer. Se for apenas controle de acesso, essa modelagem OLPT se reduziria em apenas 3 tabelas
usuario, grupo_acesso e transação(que seria a junção das tabelas restantes)
Abraço
Pessoal, obrigado pelas orientações. Pensando a respeito dos comentário, fica mais simples lidar com permissoes no grupo. O lance dos menus tende a ser estático mesmo
isto pq não vou criar formulário dinamico rsrsrs.
Eu não entendi porque você criou a tabela menu. Quando se trabalha com sessão, você dá acesso às transações baseado nas sessões, mesmo em menus dinâmicos, ou seja, se usuário pertence ao mesmo grupo da transação o acesso à transação é concedido, se não pertencer, é recusado.
Abraço e boa sorte no projeto!
A idéia do menu era criar o menu dinamicamente com hierarquia - note que tem um referencia circular, dai consigo criar menu filhos. na tabela de menu eu adiciono um link. digamos que crie um cadastro novo, para ele ficar disponível só crio o menu dele na hierarquia com a url do cadastro.
Gostei da idéia da sessão. tem algum material bom pra eu ler / me basear a respeito?
Tenho sim, se for java, existe um tutorial sobre jsp e banco de dados da Caelum muito bom!