Pergunta

Eu sou parte de uma equipe de criação de uma aplicação web utilizando PHP e MySQL. A aplicação terá vários usuários com diferentes funções. A aplicação também irá ser utilizado de uma forma geograficamente distribuída. Assim, precisamos criar um sistema de controle de acesso que opera nos dois níveis seguintes:

  1. permissões de controles de usuário para páginas específicas do PHP ou seja, fornece ou nega o acesso a páginas específicas (ou elementos de interface de usuário) com base na função do usuário. Por exemplo: um usuário pode ter acesso à página "Estudantes", mas não para a página de "professores"
  2. .
  3. permissões de controles de usuário para registros de dados específicos ou seja, modifica consultas de banco de dados de modo que somente registros específicos são exibidos. Por exemplo, para um usuário no nível da cidade, apenas os registros devem ser exibidas que se relacionam com determinada cidade do usuário, enquanto que para um usuário em nível nacional, os registros para todas as cidades do país deve ser exibido.

Eu preciso de ajuda na concepção de um sistema que possa lidar com estes dois tipos de controle de acesso. Point Nenhuma. 1 parece ser bastante simples. No entanto, estou completamente perdido sobre como fazer o ponto número 2 sem codificar as informações nas consultas SQL.

Qualquer ajuda seria apreciada.

Agradecemos antecipadamente

Vinayak

Foi útil?

Solução

Eu estava em situação semelhante há alguns meses. Descobri que ferramentas como Zend_Acl grande trabalho se você acabou de verificar o nível de acesso ao item único (ou razoavelmente baixo número deles). Ele falha quando você precisa para obter uma lista enorme de itens que o usuário tem permissão para acessar. I trabalhada solução personalizada para este problema usando Business Delegate padrão. BD fornece lógica de negócios que podem ser aplicados em contexto específico. Neste cenário uma lógica SQL foi entregue e usado como filtro condição na subselect. Veja os diagramas a seguir:

text alt
(fonte: epsi.pl ??)

E diagrama de sequência que ilustra fim chamadas:

text alt
(fonte: epsi.pl ??)

eu escrevi sobre esta solução , infelizmente, é tudo em polonês, mas você pode encontrar pedaços de código e diagramas calhar. O que posso dizer, a implementação não é um pedaço de bolo, mas em termos de performance é um campeão quando comparado a verificação de acesso iterativo para cada elemento na lista. Além disso, a infra-estrutura acima alças não apenas um tipo de itens na lista. Ela pode servir ao acessar listas diferentes, seja lista de cidades, países, produtos ou documentos, enquanto itens na lista de implementar a interface IAuthorizable.

Outras dicas

Não sei sobre os detalhes do seu problema, mas o Zend Framework tem uma vez potente ACL e AUTH conjunto de componentes que pode querer olhar. Boa coisas como controle de acesso muito preciso, o armazenamento de dados para persistência, regras condicionais avançadas.

Parece-me que o que você precisa é esta: (vou usar um país / estado / example cidade)

  1. A lista de todos os países. Cada "país" tem uma identificação.
  2. A lista de todos os Estados dentro dos países. Cada estado é vinculado ao ID do coutnry, mas também tem o seu próprio ID único.
  3. A lista de todas as cidades. Cada cidade é obrigado a qualquer um estado, ou diretamente para um país, e tem uma bandeira para indicar qual.

Para um usuário cidade, obviamente, pesquisar e exibir apenas os registros relativos à cidade que corresponde ao seu ID. Para um nível nacional ou estadual, porém, procurar todos os registros relativos a cada cidade que tem uma correspondência de ID aquela nação (ou estado ou o que você tem).

Então, basicamente, cada grupo sub depende do grupo acima dela, e embora eu não lembro, eu acredito que você pode usar sub consultas para fazer o truque de lá.

Se você não sabe como fazer isso eu iria usar um framework PHP como o Zend Framework, CakePHP, ou Symphony. Eles fizeram o trabalho pesado para você e ter algum tipo de esquema de controle de acesso já em vigor.

Eu tenho solução semelhante para construir e até agora eu decidi utilizam especificações e funções, por isso, de fato, um papel teria algumas especificações privilégio anexados. Se todos eles estão satisfeitos, a permissão é concedida, caso contrário -. Ele volta para o acesso padrão de recursos

Eu estava olhando por cima de encontrar alguém já implementar a solução, mas parece que ninguém fez. Vamos esperar que não será um fracasso:)

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