Pergunta

Eu estive pensando sobre o aplicativo web que estou prestes a começar a desenvolver e se perguntando se a minha abordagem usual poderia ser melhorado.

Em meus últimos aplicativos Criei uma tabela (veja abaixo) de papéis (como CREATE POST, EDIT POST etc.) que cada um tem um campo de bits aplicada a eles para que eu possa simplesmente atribuir um usuário de determinados direitos em registo e verificação -los mais tarde (por exemplo $user->hasRight(CREATE_POST)).

Eu estou querendo saber se há uma melhor abordagem a este. É certamente confuso quando os direitos não são especificamente ligados ao usuário (eu poderia ter uma tabela onde cada direito é uma coluna booleana, mas que só soa como uma pequena melhoria)? - e o que acontece se eu mudar alguns em torno

Eu não estou olhando para usar bibliotecas padrão (o aplicativo em si é uma experiência de aprendizagem para mim: usando PostgreSQL, git etc.) embora eu estou perfeitamente feliz em inspirar-los para construir o meu próprio - por isso, se há algo especial que você acha que eu deveria dar uma olhada por favor, diga:)

Foi útil?

Solução

Isso é basicamente a mesma abordagem tomo em minhas próprias aplicações web (e um pouco de tentativa e erro tem ido para isso por mim). A única diferença é, eu provavelmente usar uma tabela que tem as permissões diferentes como colunas, de modo que se você quiser adicionar mais permissões mais tarde, você pode. Usando pedaços em um inteiro limita a um número fixo de permissões, ou seja, quantos bits existem no inteiro. Normalmente isso seria 32 que suponho que é provavelmente o suficiente, mas eu prefiro não me limitar dessa forma.

Por que vale a pena, que é também o modelo que utiliza phpBB (permissões como colunas da tabela), e se é bom o suficiente para indiscutivelmente o mais popular aplicativo web PHP, é provavelmente bom o suficiente para você; -)

Outras dicas

Você poderia dar uma olhada na documentação do Spring Security (anteriormente Acegi), que é um framework Java ACL amplamente utilizado.

A documentação é exaustiva e também descreve as várias considerações feitas no projeto de autenticação bot e autorização. Mesmo sem usar Java é uma leitura digna.

Você pode ver o página de índice para obter uma visão geral e uma impressão do que Acegi faz (e não) fazer. Você também pode pular para o conceitos de autorização ou até mesmo para o esquema do banco .

Eu tenho certeza que você encontrou phpgacl já, mas aqui está um link no caso de você não tem. Pode ser um pouco duro de quebrar a cabeça em torno de num primeiro momento, e, certamente, a biblioteca é complicado (demorado) para implementar em um projeto, mas a documentação e demonstração são pontos de referência excelente.

PHP Generic Access Control

O Zend Framework tem uma ACL que é semelhante ao que você está tentando fazer.

ACL se aproxima em aplicações web, em geral, têm sido discutidos, por exemplo aqui .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top