Domanda

Se ho un numero di utenti e un numero di pagine e ogni utente può amministrare un numero qualsiasi di pagine e ogni pagina può essere amministrata da un numero qualsiasi di amministratori, come posso archiviare tutte queste autorizzazioni in un database?

Ad esempio, potrei avere un campo nella tabella degli utenti, che è solo un elenco delimitato da virgole di ID di pagina o un campo simile per ogni pagina (amministrato da ... ecc.). Ma ciò richiederebbe che io elabori la stringa dopo che esce dal database.

Potrei dare ad ogni utente la propria tabella, con una chiave = > valore tipo di layout, dove avrei user = > someuser, name = > some guy, autorizzazioni = > qualunque cosa, page_id = > 4, page_id = > 8, page_id = > 12, ecc. Ma sembra disordinato e richiederebbe autorizzazioni extra per mysql utente.

Supponendo che il numero di pagine sarà relativamente piccolo (lo sarà), potrei mettere un tipo di campo "flag" nella tabella degli utenti, un INT a 32 bit (non ci sarebbero più di 32 "pagine" in questo implementazione). ma ciò consentirebbe solo un tipo di privilegio on / off.

Ho anche considerato di avere una tabella utente e quindi ogni voce utente punta a una tabella delle autorizzazioni per quell'utente, che avrebbe una riga per ogni pagina con le autorizzazioni appropriate per quell'utente - che è più pulito dell'altro < !> quot; tavolo-per-user <> quot!; soluzione che ho elencato, ma che necessita di ulteriori privilegi per l'account mysql.

Altre idee? Qual è, secondo la tua esperienza, la soluzione più indolore per questo?

È stato utile?

Soluzione

molti < - > molte relazioni sono di solito modellate con una tabella intermedia. Nel tuo caso avresti queste tabelle:

User        UserPage       Page
------      -----------    -------
UserID      UserID         PageID
...         PageID         ...

La tabella intermedia (UserPage qui) è dove si memorizzano le informazioni che sono particolari per quel set di ID (le tue autorizzazioni, in questo caso).

Altri suggerimenti

il modo canonico è avere una tabella intermedia, con solo due campi: la chiave primaria di ciascuna delle tabelle collegate.

Ciò di cui hai bisogno è una tabella di mappatura.

L'UTENTE ----- lt &; USER_PERMISSIONS & Gt; ----- PAGINE

La chiave primaria per la nuova tabella è una chiave composita composta da user_id e page_id

Questo ti darà la massima flessibilità e consentirà di aggiungere nuove pagine senza dover cambiare il tuo schema.

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