Pregunta

Estoy trabajando en una aplicación con PHP + MySQL. En mi aplicación tengo una tabla para usuarios, una tabla para relaciones (amigos, seguidores, suscritos) y una tabla para publicaciones. Las principales acciones para los usuarios son:

  • Un usuario tiene amigos
  • Un usuario puede hacer entradas de publicación
  • Un usuario puede ver las entradas de los amigos
  • Y finalmente Un usuario puede bloquear las entradas de las entradas para amigos específicos

Si el usuario A es amigo del usuario B, entonces el usuario A puede ver todas las entradas del usuario B. Pero el usuario B puede restringir el acceso a solo unos pocos amigos, por ejemplo. Ahora la consulta es: ¿Cómo puedo administrar estos permisos? Estaba pensando en una tabla que almacena cada usuario que está bloqueado para ver una entrada específica, pero esta no sería una buena idea una vez que un solo usuario pueda tener varios amigos. Entonces, ¿cómo puedo resolver esto? ¿Alguien puede mostrarme cómo comenzar? Tal vez los términos correctos para buscar en Google o un enlace para algo similar.

¿Fue útil?

Solución

Estás en el camino correcto. Vas a querer usar tablas vinculadas. Comenzarías con los usuarios de una mesa. Cada usuario tiene una identificación. Luego cree una tabla users_friends. Esta tabla consistiría en dos ID, user_id y friend_id. La última tabla sería Users_Restricted, lo que también consistiría en dos ID, User_ID y RestrictEd_ID.

Por ejemplo

users
user_id name 
1       user1
2       user2
3       user3

users_friends
friend1_id friend2_id
1          2
2          3

Esto dice que el usuario 1 y 2 son amigos y usuarios 2 y 3 son amigos. (Esto supone que si el usuario 1 es amigo del usuario 2, entonces el usuario 2 también es amigo del usuario 1)

users_restricted
user_id restricted_id
1       2

Ahora, aunque el usuario 1 y el usuario 2 son amigos, el usuario 2 está en la lista restringida, lo que significa que no permite que el usuario 2 vea las entradas del usuario 1.

Puede ver que las tablas están vinculadas a través de ID y todas las ID provienen de la tabla de usuarios. Esto también se puede ampliar para relacionarse con las entradas. Simplemente consulte las entradas por su identificación.

Para tener usuarios bloqueados para entradas específicas, tendría las siguientes tablas.

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

Ahora el usuario 1 ha realizado 2 entradas (entrada 1 y entrada 2) y el usuario 2 ha realizado 2 entradas (entrada 3 y entrada 4). Otra tabla contendría las restricciones.

entries_restricted
entry_id restricted_user_id
1        2

Esto diría que el usuario 2 no puede ver la entrada 1.

Para obtener las entradas visibles para el usuario 2, su declaración se vería así.

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;

La declaración selecciona toda la información de entrada excluyendo las entradas restringidas al usuario 2.

Otros consejos

Puede comenzar a usar las siguientes tablas. La primera tabla es la tabla de usuarios (como sugirió Jason.wolfsmith)

users
u_user_id     u_name   
1             user1    
2             user2    
3             user3    

La segunda tabla puede ser así.

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

Esta tabla contendrá permiso y nombre de las entradas que deberían estar permitidas para la vista. 1 - restringir algunas entradas; 0 - Permitir todos. En la columna permiso El tipo de datos puede establecerse como establecido ('1', '0') y el tipo de datos en entradas NULO.
Por lo tanto, User1 no permite ver la entrada1 al usuario2. (Entrada1 y entrada3 son de la tabla de entradas).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top