Pergunta

Atualmente estou trabalhando para melhorar o meu banco de dados para dar espaço para o crescimento. Tal como está, diferentes usuários têm diferentes 'permissões' para áreas do site. Alguns usuários têm permissões para várias áreas do site.

Eu gostaria algum feedback se eu estou fazendo isso da maneira mais eficiente:

 tblUsers:
    usrID       usrFirst       usrLast       phone    //etc....
      1            John          Doe 
      2            Jane          Smith
      3            Bill          Jones          


 tblAreas: 
    id      name   
     1       Marketing
     2       Support
     3       Human Resources
     4       Media Relations

 tblPermissions:

    id       usrID       areaID   
    1          1           2
    2          1           4
    3          2           1
    4          3           3

Agora, para cada "zona", tenho diretórios separados. No entanto, eu gostaria de minimizar todos estes diretórios para baixo a um diretório principal, e, em seguida, os usuários redirecionamento no login em sua apropriada 'área' com base em suas permissões.

Isso soa como eu estou fazendo isso corretamente? Eu nunca criou um site multi-camadas com diferentes permissões e diferentes grupos de pessoas, assim, certamente estou aberto a aprender mais sobre como fazer isso corretamente.

Muito obrigado!

Foi útil?

Solução

O projeto geral é ok. As questões que surgem em mim relacionar com nomeação.

  • SQL não precisa de notação húngara - geralmente considerada / desnecessária ruim (tblUsers -> usuários)
  • .
  • eu não iria prefixo da tabela de nomes para a coluna de nomes ...
  • ... exceto para a coluna "ID", que deve sempre incluir o seu nome da tabela (ou seja Areaid)
  • O seu "primeiro" e "último" coluna não fazem sentido (dica: firstName)
  • Eu renomear tblPermissions -> userAreas

Dependendo da sua linguagem de programação e banco de dados, eu também recomendo o uso de sublinhado em vez de capitalização para a sua mesa / coluna de nomes.

Quanto a usar diretórios separados para diferentes grupos, eu aconselho contra ele. Tem a segurança de verificações em seu código em vez de seu layout de diretório.

Raciocínio:

O que acontece quando alguém decide que o apoio também é permitido fazer algumas coisas marketing? Se alterar o seu código, ou adicionar um registro em seu banco de dados?

Ou o que se você tiver ações sobreposição?

@brianpeiris: Um par de coisas vêm à mente:

  • Não há necessidade de aliases de coluna em junções
  • Facilita a busca através de código ( "foo_id" dá menos resultados do que "id")
  • Cadastrar-se usando (foo_id) em vez de JOIN ON (foo.id = bar.id).

Outras dicas

A aparência de esquema bem.

Gostaria de sugerir que você colocar o controle de acesso no controlador e base-lo de de caminho de URL, para que você não está codificando-lo em cada seção.

Sim, isso parece que está se dirigindo a sua necessidade perfeitamente do lado do banco de dados.

O desafio será usar os dados como simples e declarativa possível. Onde é o lugar certo para declarar o "área" você está em? A cada página fazer isso, ou se há uma função que calcula-lo, ou pode controladores de fazê-lo? como alguém sugere. A segunda parte está avaliando o usuário atual contra isso. Idealmente você acabar com uma única função como "security_check_for_area (4)" que faz tudo.

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