PHP mysql verifica l'equivalenza relazionale

3

Supponiamo di avere una tabella utenti e in quella tabella utenti ho un role_id.

Nella mia tabella dei ruoli ho:

users - id - role_id

roles - id - name

roles id | name 1 | admin 2 | normal

Ora nel codice voglio disabilitare l'accesso alla pagina admin.php. Quindi in cima ho messo

if ($user->role_id != 1){
    header('location: forbidden.php');    
}

Sembra una cattiva pratica affidarsi a role_id come 1. Penso che sia meglio fare qualcosa del tipo:

if ($user->role_name == 'admin'){ ...

Ora mi affido al testo del ruolo, che non è eccezionale. Quindi ho creato classi const come:

class RoleType{
    const ADMIN = "admin";
    const NORNAML = "normal";
}
....
if ($user->role_name == RoleType::ADMIN){ ...

Il problema qui è ora se lo cambio nel database Devo cambiare la mia classe RoleType.

Credo che nessuno di questi sia l'ideale.

Qual è il modo migliore per gestirlo?

    
posta ajon 20.07.2015 - 22:30
fonte

1 risposta

2

Come progettato con ruoli che sono una relazione uno a uno con gli utenti, la mia preferenza personale sarebbe quella di abbandonare completamente la tabella di ricerca per i ruoli e andare con un tipo di dati enum nella tabella degli utenti. Internamente in MySql verrà memorizzato in modo simile, quindi non richiederà più spazio. Ma restituirà la rappresentazione della stringa nei risultati chiarendo che intendi utilizzare la stringa come chiave.

Naturalmente, dovrai ancora memorizzare le stringhe nel codice e credo che la tua soluzione delle costanti nella classe RoleType sia un modo pulito per farlo. Ovviamente vorrai metterlo in qualche file condiviso condiviso e incluso da qualche parte.

link

    
risposta data 21.07.2015 - 10:38
fonte

Leggi altre domande sui tag