Pergunta

Alguém conhece alguns bons recursos relacionados à configuração de sistemas hierárquicos de contas de usuários?Atualmente estou configurando um e estou lutando com algumas lógicas mais complexas (especialmente com a determinação de permissões).Eu esperava poder encontrar alguns recursos para me ajudar.

Alguns antecedentes:Estou construindo um sistema de contas de usuário para um CMS da web que permite uma hierarquia de grupos aninhados.Cada grupo pode ter acesso permitido/negado para leitura, gravação, adição e exclusão (explicitamente para esse grupo ou implicitamente por um de seus pais).Como se isso não fosse complicado o suficiente, o sistema também permite que os usuários sejam membros de vários grupos.- É aqui que estou preso.Tenho tudo configurado, mas estou lutando com a lógica real para determinar permissões para um determinado usuário.

Foi útil?

Solução

O manual do CakePHP tem uma excelente descrição de como funcionam as Listas de Controle de Acesso.

http://book.cakephp.org/2.0/en/core-libraries/components/access-control-lists.html

Outras dicas

Representa as permissões definidas para um determinado grupo como uma máscara de bits.OR juntar as máscaras de bits fornecerá o conjunto de permissões resultante.

Atualização para @Alex:

Escrevi esta resposta há 3 anos, mas creio que estava aludindo ao seguinte...

Da pergunta

uma hierarquia de grupo aninhada.Cada grupo pode ser permitido/negado acesso a ler, escrever, adicionar e excluir (explicitamente para esse grupo ou implicitamente por um de seus pais).Como se isso não fosse complicado o suficiente, o sistema também permite que os usuários sejam membros de vários grupos.- É aqui que estou preso.Eu tenho tudo configurado, mas estou lutando com a lógica real para determinar as pemissões para um determinado usuário.

Atribua uma máscara de bits que corresponda ao conjunto total de permissões de um grupo (ou função) no sistema:

por exemplo. 00 (usar dois bits simplifica aqui!)

A primeira parte confere Permission A e o segundo Permission B.

Agora digamos que o Grupo A confere o seguinte conjunto de permissões: 01.

...e digamos que o Grupo B confere o seguinte conjunto de permissões: 10.

Para obter o conjunto de permissões resultante para um usuário em um conjunto arbitrário de grupos, você pode executar uma operação lógica OR nas máscaras de bits do conjunto de permissões:

Permission set for Group A   01
Permission set for Group B   10 OR 
                             ----
Resultant permission set     11 (i.e. both permission A and B are conferred)

Não conheço os detalhes do sistema do questionador, mas o sistema aqui descrito poderia ser aumentado para alcançar diferentes comportamentos de composição de grupo usando diferentes operadores lógicos.

Veja as permissões no Sistema de arquivos Andrew.Ele permite que os usuários criem e administrem seus próprios grupos, ao mesmo tempo que atribuem seletivamente direitos de administrador e ACLs.Você pode descobrir que muitos dos detalhes incômodos já foram resolvidos para você no modelo deles.

Editar: aqui está um link melhor para a documentação do AFS:

http://www.cs.cmu.edu/~help/afs/index.html

Aqui está a seção sobre grupos:

http://www.cs.cmu.edu/~help/afs/afs_groups.html

Já fiz exatamente isso antes e não é uma implementação trivial.Você vai querer dar uma olhada na classe SecurityPermission.

[http://msdn.microsoft.com/en-us/library/system.security.permissions.securitypermission.aspx][1]

Já fiz isso antes utilizando XML (o que não tenho certeza se faria novamente) e armazenando esse XML como lista de permissões dentro do servidor SQL em uma coluna XML por meio de um processo armazenado CLR.O XML teria um elemento chamado "permissão" e então a permissão seria na verdade um ENUM dentro do código.Cada permissão era uma nova implementação da classe SecurityPermission (link acima). Os usuários eram vinculados a grupos definidos no SQL Server e, à medida que o usuário era adicionado/removido dos grupos, o documento XML era atualizado para refletir quais grupos eles estavam separados de.

Assim que o usuário fizesse login, as credenciais do usuário seriam carregadas na loja de aplicativos (sessão) e então acessadas de acordo.Quando a autorização fosse necessária, o XML na loja de aplicativos seria baixado e carregado no SecurityPermission por meio do método "FromXML".Nesse ponto, eu usaria os seguintes métodos para determinar se o usuário tinha permissão:

  • Demanda
  • Cruzar
  • União
  • É irrestrito
  • IsSubSetOf

etc., etc., etc.

Nesse ponto, após realizar a Demanda, consegui determinar se o chamador tinha acesso de acordo com a forma como implementei minhas rotinas de segurança no SecurityPermissions.

Novamente, isso está deixando de fora uma tonelada de detalhes, mas deve levá-lo ao caminho certo.

Dê uma olhada neste espaço de nomes também:[2]: http://msdn.microsoft.com/en-us/library/system.security.permissions.aspx "Sistema.Segurança.Permissões"

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