Pergunta

Eu implementei uma lista de controle de acesso usando 2 matrizes estáticas (para as funções e os recursos), mas adicionei uma nova tabela no meu banco de dados para as permissões.

A ideia de usar uma matriz estática para as funções é que não vamos criar novas funções o tempo todo, para que os dados não mudam o tempo todo.Eu pensei o mesmo para os recursos, também porque acho que os recursos são algo que apenas os desenvolvedores devem tratar, porque estão mais relacionados ao código do que para um dado.Você tem algum conhecimento do por que usar uma matriz estática em vez de uma tabela de banco de dados?Quando / por quê?

Foi útil?

Solução

O problema com valores de disco rígido em seu código é que comparado com uma mudança de banco de dados, as alterações de código são muito mais caras :

  • geralmente precisa criar um novo pacote para implantar. Esse pacote precisaria ser testado em regressão, para verificar se nenhum bugs foram introduzidos. DICA: Mesmo que você mude apenas uma linha de código, os testes de regressão são necessários para verificar se nada deu errado no processo de compilação (por exemplo, uma biblioteca não é embalada corretamente, fazendo com que um módulo falhe).

  • O código de atualização pode significar tempo de inatividade, que também aumenta o risco porque, se a atualização falhar, sempre há um risco de este

  • em um ambiente corporativo é geralmente muito mais rápido obter atualizações de banco de dados aprovadas do que a mudança de código.

Tudo o que custa tempo / esforço / dinheiro. Nota, na minha opinião, realizar dados de referência ou dados estáticos em um banco de dados não significa um sucesso no desempenho, porque os dados sempre podem ser armazenados em cache.

Outras dicas

Sua matriz estática é um exemplo de "codificação dura" seus dados no seu programa, o que é bom se você nunca quiser alterá-lo.

Na minha experiência, para o seu caso de uso, isso não é vai ser verdadeiro, e codificar seus dados em sua fonte resultará em você ser constantemente solicitado a atualizar essas coisas que você assumenunca vai mudar.

protip: para um gerente de projeto e / ou cliente, nada é imutável.

Eu acho que isso apenas se resume a como você acha que o banco de dados será usado no futuro.Se você deixar os dados em matrizes, e mais tarde desejará criar outro aplicativo que interage com este banco de dados, você começará a manter os dados de funções / recursos em ambas as bases de código.Mas, se você colocar os papéis / recursos no banco de dados, o banco de dados será a única autoridade neles.

Eu recomendaria colocá-los no banco de dados.Você pode ler as tabelas em matrizes na inicialização, e você terá os mesmos benefícios de desempenho e a flexibilidade de ter outros aplicativos capazes de obter essas informações.

Também, quando / se você conseguir escrever um sistema de gerenciamento de usuários, é mais fácil exibir as funções / recursos de um usuário, juntando as tabelas do que para recuperar os papéis / IDs de recursos e ter que procurarnomes bonitos em suas matrizes.

Usando matrizes estáticos Você obtém desempenho, considerando que não precisa acessar o banco de dados o tempo todo, mas a segurança é mais importante que o desempenho, então sugiro que você faça o controle de permissões no banco de dados.

Estudo no RBAC.

As coisas consideradas estático devem ser codificadas estáticas.Isso é se você realmente considerá-los estático.

Mas eu sugiro usar constantes de classe em vez de valores de matriz estáticos.

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