Как управлять доступом пользователя и разрешения пользователя
-
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 из таблицы записей).