Domanda

Sto lavorando su un'applicazione con PHP + MySQL. Nella mia applicazione ho un tavolo per gli utenti, una tabella per i rapporti (amici, in seguito, sottoscritta) e un tavolo per i messaggi. Le azioni principali per gli utenti sono:

  • l'utente A ha degli amici
  • Un utente può effettuare inserimenti pubblicare
  • Un utente può visualizzare le voci di amici
  • E infine un utente può bloccare le voci di visualizzazione per specifici amici

Se l'utente A è diventato amico di utente B, allora l'utente A può vedere tutte le voci utente B. Ma l'utente B può limitare l'accesso solo a pochi amici, per esempio. Ora la domanda è: come posso gestire queste autorizzazioni? Stavo pensando a una tabella che memorizza ogni utente che è bloccato per la visualizzazione di una voce specifica, ma questo poteva essere una buona idea una volta che un singolo utente può avere diversi amici. Così, come posso risolvere questo problema? Qualcuno mi può mostrare come iniziare? Forse i termini giusti per la ricerca su Google o su un link per qualcosa di simile.

È stato utile?

Soluzione

Sei sulla strada giusta. Avete intenzione di voler utilizzare le tabelle collegate. Si potrebbe iniziare con gli utenti tavolo. Ogni utente ha un id. Quindi creare un tavolo users_friends. Questa tabella consisterebbe di due ID, id_utente e friend_id. L'ultima tabella sarebbe users_restricted che potrebbe anche consistere di due ids, id_utente e restricted_id.

Ad esempio

users
user_id name 
1       user1
2       user2
3       user3

users_friends
friend1_id friend2_id
1          2
2          3

Questo dice utente 1 e 2 sono amici e utenti 2 e 3 sono amici. (Ciò presuppone che se l'utente 1 è amico di utente 2 allora l'utente 2 è anche amico di utente 1)

users_restricted
user_id restricted_id
1       2

Ora, anche se l'utente 1 e 2 utente sono amici, utente 2 è nella lista significato limitato non consentono all'utente 2 alle voci vista utente 1 del.

Si può vedere che le tabelle sono collegate tramite gli ID e tutti gli ID provenire dalla tabella degli utenti. Questo può essere ampliato per riferirsi alle voci pure. Basta fare riferimento a voci dal loro id.

Per avere utenti bloccati per voci specifiche si dovrebbe avere le seguenti tabelle.

entries
entry_id user_id ... other columns holding entry information
1        1
2        1
3        2
4        2

Ora l'utente 1 ha fatto 2 voci (ingresso 1 e ingresso 2) e 2 utente ha fatto 2 voci (ingresso 3 e di ingresso 4). Un altro tavolo terrebbe le restrizioni.

entries_restricted
entry_id restricted_user_id
1        2

Questo direbbe utente 2 non può vedere l'ingresso 1.

Per ottenere le voci visibili per l'utente 2 la sua dichiarazione sarebbe simile a questa.

SELECT e.*, er.entry_id FROM entries e JOIN entries_restricted er ON e.entry_id=er.entry_id WHERE er.restricted_user_id != 2;

I seleziona istruzione tutte le informazioni di entrata escluso le voci soggette a restrizioni per l'utente 2.

Altri suggerimenti

È possibile iniziare a utilizzare tabelle seguenti. La prima tabella è tabella utenti (come suggerito Jason.Wolfsmith)

users
u_user_id     u_name   
1             user1    
2             user2    
3             user3    

La seconda tabella può essere come questo.

friends_permissions
f_user_id  f_friend_id permission entries
1          2               1        entry1        
2          3               0
1          3               1        entry3

Questa tabella conterrà il permesso e il nome di voci che dovrebbero essere permettono di vista. 1 - limitare alcune voci; 0 - consentire a tutti. Nella colonna il permesso tipo di dati potrebbe essere impostato come SET ( '1', '0') e il tipo di dati in voci NULL.
Così, user1 non consentono di vista ENTRY1 a user2. (ENTRY1 e entry3 sono da tavolo voci).

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