Permissões se propagam para Javascript
-
05-07-2019 - |
Pergunta
Eu estou debatendo a melhor maneira de propagar permissões bastante complexas do servidor para uma aplicação AJAX, e eu não tenho certeza que a melhor abordagem a adoptar.
Essencialmente, quero que meus permissões para ser definido para que eu possa solicitar um conjunto de permissões em um tiro, e ajustar a interface do usuário conforme apropriado (as mudanças de interface do usuário pode ser tão baixo nível como desabilitar alguns itens do menu de contexto). Claro, eu ainda preciso fazer valer o lado do servidor permissões.
Então, eu queria saber se alguém tem alguma sugestão para a melhor maneira de
- manter as permissões e usá-los no código do servidor
- têm fácil acesso às permissões em javascript
- não tem que fazer um pedido de ida e volta para o servidor para cada permissão individual
Os pensamentos?
Solução
Se você tem um conjunto claro de permissões, como um "nível de usuário" ou "Tipo de usuário", você poderia simplesmente passar o valor para baixo em um campo escondido e acesso o valor através do DOM. Você ainda pode fazer isso se as suas permissões eram mais granular, mas você quer ter um monte de campos ocultos ou você teria para codificar a informação em XML ou JSON ou algum outro formato.
Você pode defini-las como sinalizadores de bit de modo que você poderia ou um único valor numérico com uma máscara para ver se o usuário teve a permissão para uma atividade específica. Isso seria muito flexível e contanto que você não tem mais do que 32 ou assim "direitos" específicos, que permitiria a qualquer permutação desses direitos em um pacote muito pequeno (basicamente um int não assinado).
Por exemplo:
0x00000001 //edit permission
0x00000002 //create new thing permission
0x00000004 //delete things permission
0x00000008 //view hidden things permission
.
.
.
0x80000000 //total control of the server and everyone logged in
Em seguida, um usuário com uma permissão de 0x000007
poderia editar, criar e excluir, mas nada mais.
Em qualquer caso, eu acho que você está no caminho certo - fazer o pedido uma vez por página invocação, armazenar as permissões em uma estrutura global de dados JavaScript, e de lá ir. AJAX é bom, mas você não quer para consultar o servidor para cada permissão específica todo sua página. Você poderia fazê-lo uma vez no carregamento da página, configurar a apresentação de sua página e salvar o valor em uma variável global, em seguida, fazer referência a permissão (s) localmente para funções de eventos.
Outras dicas
Se você transmitir a estrutura de permissão para o cliente como um objeto JSON (ou XML, se você preferir), você pode manipular esse objeto com o código do lado do cliente, e enviá-lo de volta para o servidor, que pode fazer o que for necessidades para validar os dados e persistem-lo.
Eu não necessariamente vê-lo como a solução mais "correta", mas seria possível manter todo o material permissão no lado do servidor, e apenas servem a interface do usuário atualizados em vez de algum tipo de JSON sistema de permissões?
Você tem que tomar a decisão com base em quão ocupado e intenso seu aplicativo espera ser, mas definitivamente um vale a tomada de decisões de qualquer maneira
codificá-los como JSON .