Domanda

Attualmente sto lavorando per migliorare il mio database per fare spazio alla crescita. Allo stato attuale, diversi utenti hanno "autorizzazioni" diverse per le aree del sito Web. Alcuni utenti dispongono delle autorizzazioni per più aree del sito Web.

Vorrei un feedback se lo sto facendo nel modo più efficiente:

 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

In questo momento, per ogni "area", ho directory separate. Tuttavia, vorrei ridurre al minimo tutte queste directory fino a una directory principale, quindi reindirizzare gli utenti che accedono alla loro 'area' appropriata in base alle loro autorizzazioni.

Sembra che lo stia facendo correttamente? Non ho mai creato un sito a più livelli con autorizzazioni diverse e diversi gruppi di persone, quindi sono certamente aperto a saperne di più su come farlo correttamente.

Grazie mille!

È stato utile?

Soluzione

Il design generale è ok. I problemi che mi emergono riguardano la denominazione.

  • SQL non ha bisogno della notazione ungherese, generalmente considerata non necessaria / non valida (tblUsers - > users).
  • Non aggiungerei il prefisso dei nomi delle tabelle ai nomi delle colonne ...
  • ... ad eccezione della colonna "id" che dovrebbe sempre includere il nome della tabella (ovvero areaId)
  • Il tuo " primo " e "ultimo" colonna non ha senso (suggerimento: firstName)
  • Rinominerei tblPermissions - > userAreas

A seconda del linguaggio di programmazione e del database, consiglierei anche di utilizzare il trattino basso anziché le lettere maiuscole per i nomi delle tabelle / colonne.

Per quanto riguarda l'uso di directory separate per gruppi diversi, mi sconsiglio. Avere i controlli di sicurezza nel codice anziché nel layout della directory.

Ragionamento:

Cosa succede quando qualcuno decide che anche al supporto è permesso fare qualcosa di marketing? Dovresti cambiare il tuo codice o aggiungere un record nel tuo database?

O cosa succede se si hanno azioni sovrapposte?

@brianpeiris: mi vengono in mente un paio di cose:

  • Non sono necessari alias di colonna in JOINs
  • Semplifica la ricerca nel codice (" foo_id " fornisce meno risultati di " id ")
  • ISCRIVITI USANDO (foo_id) anziché JOIN ON (foo.id = bar.id).

Altri suggerimenti

Lo schema sembra a posto.

Suggerirei di inserire il controllo dell'accesso nel controller e di basarlo sul percorso dell'URL, in modo da non codificarlo in ogni sezione.

Sì, sembra che stia rispondendo perfettamente alle tue esigenze dal lato del database.

La sfida sarà utilizzare i dati nel modo più semplice e dichiarativo possibile. Dov'è il posto giusto per dichiarare quale "area" ci sei? Ogni pagina esegue questa operazione o esiste una funzione che la calcola o può essere eseguita dai controller? come qualcuno suggerisce. La seconda parte sta valutando l'utente corrente rispetto a questo. Idealmente si finisce con una singola funzione come " security_check_for_area (4) " quello fa tutto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top