Я разрабатываю это приложение на PHP. Приложение будет состоять из области администрирования, которая также будет содержать функции сотрудников. Другая часть приложения – клиентский сайт.
Область администрирования имеет свою собственную базу данных. Клиентский сайт также имеет свою собственную базу данных.
В базе данных администрирования у меня есть таблица с пользователями, и я также планирую реализовать RBAC, чтобы пользователи могли иметь роли, разрешения и т. Д.
Клиентский сайт также позволяет клиентам регистрироваться и храниться в пользовательской таблице в базе данных веб-сайта клиента.
То, что мне нужно, – это возможность иметь сотрудников, которые входят в систему на веб-сайте клиента. Они также должны иметь разрешения, которые контролируют, какие части веб-сайта клиента они могут изменить, и какие строки в базе данных веб-сайта клиента они могут изменить.
Каков наилучший способ реализации этого?
Приветствия 🙂
Я бы рекомендовал всегда объединять, когда это возможно, таблицы, обрабатывающие одну и ту же концепцию (Пользователи здесь).
Здесь проблема защиты данных , независимо от того, как хранятся ваши данные (одна или две таблицы, одна или две базы данных).
С MySQL (и многими другими распространенными СУБД) вы можете:
Создайте учетную запись MySQL, которая будет иметь доступ только к некоторым таблицам, выполнять только некоторые операции над ней (например, только SELECT), доступ к некоторым столбцам и т. Д.
Скрыть таблицу из учетной записи MySQL и предоставить только доступ к представлению в этой таблице (фильтрация столбцов / результатов таблицы).
Какова бы ни была ваша структура данных, вам нужно будет проверить некоторые данные о сотрудниках (логин, пароль, разрешения и т. Д.), И вашему коду придется использовать учетную запись MySQL с достаточными привилегиями для этого.
Поэтому я бы посоветовал вам держать своих пользователей в одной таблице, добавлять таблицы для описания ролей (сотрудника, клиента и т. Д.) И мудро.
Имейте в виду отдельно решать проблемы с архитектурой базы данных и проблемами безопасности доступа к данным . Безопасность доступа к данным не должна приводить вас к нелогичным выборам в дизайне базы данных.
Вы можете сделать что-то вроде этого:
$sql = "SELECT * FROM employeedb.employee_user_table WHERE employee_id = '???'";
В качестве проблемы комментариев из нитератора. Для двух пользовательских таблиц вы можете использовать следующее:
создать новую таблицу. например: global_user_table с полем:
каждый раз при входе в систему пользователя, попросите его проверить эту таблицу и сохранить table_source в сеансе для последующих использования.