Question

Je travaille sur une application avec PHP + MySql. Dans ma demande, j'ai une table pour les utilisateurs, une table de relations (amis, après, souscrit) et une table pour les postes. Les principales actions pour les utilisateurs sont:

  • utilisateur A a des amis
  • Un utilisateur peut faire des entrées poste
  • Un utilisateur peut voir les entrées amis
  • Et enfin un utilisateur peut bloquer les entrées de visualisation pour des amis spécifiques

Si l'utilisateur A est amis avec l'utilisateur B, l'utilisateur A peut voir toutes les entrées de l'utilisateur B. Mais l'utilisateur B peut restreindre l'accès à quelques amis, par exemple. Maintenant, la requête est: comment puis-je gérer ces autorisations? Je pensais à une table qui stocke chaque utilisateur qui est bloqué pour l'affichage d'une entrée spécifique, mais ce ne pouvait pas être une bonne idée une fois un seul utilisateur peut avoir plusieurs amis. Alors, comment puis-je résoudre ce problème? Quelqu'un peut-il me montrer comment commencer? Peut-être que les bons termes pour la recherche sur Google ou un lien pour quelque chose de similaire.

Était-ce utile?

La solution

Vous êtes sur la bonne voie. Vous allez vouloir utiliser des tables liées. Vous commencez par un utilisateur de table. Chaque utilisateur dispose d'un identifiant. Ensuite, créez un users_friends de table. Ce tableau se composerait de deux ids, user_id et friend_id. La dernière table serait users_restricted qui serait également composé de deux ids, user_id et restricted_id.

Par exemple

users
user_id name 
1       user1
2       user2
3       user3

users_friends
friend1_id friend2_id
1          2
2          3

dit l'utilisateur 1 et 2 sont des amis et des utilisateurs 2 et 3 sont des amis. (Cela suppose que, si l'utilisateur 1 est ami avec l'utilisateur 2, alors l'utilisateur 2 est également ami avec l'utilisateur 1)

users_restricted
user_id restricted_id
1       2

Maintenant, même si l'utilisateur 1 et l'utilisateur 2 sont des amis, l'utilisateur 2 est au sens de la liste restreinte ne permettent pas à l'utilisateur 2 aux entrées de l'utilisateur 1.

Vous pouvez voir que les tables sont reliées par ids et tous les ids viennent de la table des utilisateurs. Cela peut être étendu à se rapporter à des entrées aussi bien. Il suffit de se référer à des entrées par leur identifiant.

Pour que les utilisateurs bloqués pour les entrées spécifiques que vous auriez les tableaux ci-dessous.

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

Maintenant utilisateur 1 a 2 entrées (entrée 1 et l'entrée 2) et l'utilisateur 2 a 2 entrées (entrée 3 et à l'entrée 4). Une autre table détiendrait les restrictions.

entries_restricted
entry_id restricted_user_id
1        2

Cela dit utilisateur 2 ne peut pas voir l'entrée 1.

Pour obtenir les entrées visibles à l'utilisateur 2 votre déclaration ressemblerait à quelque chose comme ça.

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;

L'instruction sélectionne toutes les informations d'entrée à l'exception des entrées limitées à l'utilisateur 2.

Autres conseils

Vous pouvez commencer à utiliser les tableaux suivants. La première table est table des utilisateurs (comme suggéré Jason.Wolfsmith)

users
u_user_id     u_name   
1             user1    
2             user2    
3             user3    

La deuxième table peut être comme ça.

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

Ce tableau contiendra l'autorisation et le nom des entrées qui devraient être permettent de vue. 1 - restreindre certaines entrées; 0 - permettre à tous. Dans la colonne l'autorisation type de données peut être défini comme SET ( '1', '0') et le type de données dans entrées NULL.
Ainsi, user1 ne permettent pas de vue entry1 à utilisateur2. (Entry1 et entrée3 sont de la table entrées).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top