Как правильно распределить права доступа пользователям к записям в бд?
Здравствуйте, я совсем новичок и не могу понять следующий момент.
Пишу чисто для себя, особо пока не интересует использование "готовых решений", поскольку хочу разобраться поглубже с тем, как работают связь БД, сервера и пользователя.
Предположим, пользователь авторизовался. Теперь я хочу, чтобы у пользователя была возможность добавлять контент в бд. Допустим, я с этим тоже справился. Но суть в том, что этот контент должен видеть только этот пользователь и к этому контенту должен иметь доступ только пользователь (предположим с id = 5). Как надо организовывать хранение данных в бд? Для каждого пользователя делать свою таблицу с контентом и давать доступ только к этой таблице? Тогда вопрос, как сделать, что бы некоторые строки из этой таблицы были доступны и другим пользователям? Скиньте плиз каких-нибудь статей, уроков для новичков. Как правильно организовывать базы данных, чтобы это было безопасно?
просто в таблице с контентом необходимо ввести поле owner(владелец) при запросах в базу использовать ID пользователя, то есть что-то вроде: SELECT * FROM table WHERE id = 45 AND owner = 5
или чтоб получить все записи пользователя SELECT * FROM table WHERE owner = 5
А как решается вопрос безопасности? То есть я могу отправить подобный запрос через AJAX, например, с нужным мне id и получить его данные (которые, возможно, мне хотелось бы скрыть от посторонних глаз)
Делаешь переменную сессии с I'd пользователя и когда записываешь контент в таблицу,
то передавай и эту переменную, а когда вытаскивать контент с бд, то чтоб проходили условия типа взять с такой таблицы инфу с такой инфой, но при этом, чтоб id сессии был равен полю session id в бд
Два способа:
1. В каждой таблице держать user_id и фильтровать по нему.
2. Завести отдельное значение для инкрементов единых на все справочники, или использовать тип UUID, а в отдельной таблице держать связку ID записи и ID пользователя.
Первое проще, второе более масштабируемое, оно позволит распределять записи например давать доступ нескольким пользователям видеть какую-то одну запись.
Денис Федоров, Ну видео точно нет. Например если вы создаете справочник клиентов, то в первом случае видны только созданные пользователем, а во втором вы можете на одного клиента дать доступ нескольким пользователям. В первом просто where user_id=:user_id, а во втором соединение двух таблиц с двумя условиями.