Как управлять доступом пользователя и разрешения пользователя

StackOverflow https://stackoverflow.com/questions/8812766

  •  26-10-2019
  •  | 
  •  

Вопрос

Я работаю над приложением с PHP + MySQL. В моем приложении у меня есть таблица для пользователей, таблица для отношений (друзья, следующие, подписанные) и таблица для сообщений. Основными действиями для пользователей являются:

  • У пользователя есть друзья
  • Пользователь может сделать записи Post
  • Пользователь может увидеть записи друзей
  • И наконец Пользователь может блокировать просмотр записей для конкретных друзей

Если пользователь A дружит с пользователем B, то пользователь A может увидеть все записи от пользователя B., но пользователь B может ограничить доступ только к нескольким друзьям. Теперь запрос: как я могу управлять этими разрешениями? Я думал о таблице, в которой хранится каждого пользователя, который заблокирован для просмотра конкретной записи, но это не было бы хорошей идеей, когда у одного пользователя может быть несколько друзей. Итак, как я могу решить это? Кто -нибудь может показать мне, как начать? Может быть, правильные термины для поиска в Google или ссылке для чего -то подобного.

Это было полезно?

Решение

Ты на правильном пути. Вы захотите использовать связанные таблицы. Вы начнете с пользователей таблицы. У каждого пользователя есть идентификатор. Затем создайте таблицу users_friends. Эта таблица будет состоять из двух идентификаторов, user_id и friend_id. Последняя таблица будет users_restric, которая также будет состоять из двух идентификаторов, user_id и rentricted_id.

Например

users
user_id name 
1       user1
2       user2
3       user3

users_friends
friend1_id friend2_id
1          2
2          3

Это говорит о том, что пользователи 1 и 2 - друзья, а пользователи 2 и 3 - друзья. (Это предполагает, что если пользователь 1 дружит с пользователем 2, то пользователь 2 также дружит с пользователем 1)

users_restricted
user_id restricted_id
1       2

Теперь, хотя пользователь 1 и пользователь 2 являются друзьями, пользователь 2 находится в ограниченном списке. Значение не позволяет пользователю 2 просматривать записи пользователя 1.

Вы можете видеть, что таблицы связаны с помощью идентификаторов, а все идентификаторы поступают из таблицы пользователей. Это можно расширить, чтобы относиться и к записям. Просто обратитесь к записям по их удостоверению личности.

Чтобы пользователи были заблокированы для определенных записей, у вас будут следующие таблицы.

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

Теперь пользователь 1 сделал 2 записи (запись 1 и запись 2), а пользователь 2 сделал 2 записи (запись 3 и запись 4). Другая таблица будет иметь ограничения.

entries_restricted
entry_id restricted_user_id
1        2

Это сказал бы, что пользователь 2 не может просмотреть запись 1.

Чтобы сделать записи видимыми пользователю 2, ваш утверждение будет выглядеть примерно так.

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;

Оператор выбирает всю информацию о записи, за исключением записей, ограниченных пользователем 2.

Другие советы

Вы можете начать использовать следующие таблицы. Первая таблица - таблица пользователей (как предложил Jason.wolfsmith)

users
u_user_id     u_name   
1             user1    
2             user2    
3             user3    

Вторая таблица может быть таким.

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

Эта таблица будет содержать разрешение и название записей, которые следует разрешить для просмотра. 1 - ограничить некоторые записи; 0 - разрешить всем. В столбце разрешение Тип данных может быть установлен как установлен ('1', '0') и тип данных в записи НУЛЕВОЙ.
Таким образом, user1 не позволяет просматривать intrint1 до user2. (intry1 и intry3 из таблицы записей).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top