Если вам нужна максимальная степень детализации, возможность «предоставить» каждую строку любому из очень многих пользователей, тогда у вас есть отношение «многие ко многим», да?
Поэтому примените следующую схему:
Добавить таблицы пользователей.
Тогда для каждой ограниченной таблицы, поэтому следующее:
Переименуйте его в tablename + "_base".
создать таблицу «многие ко многим», которая
связывает идентификатор этой таблицы с
идентификатор пользователя, называемый tablename +
"Allowed_user".
создать представление с таблицей имен
имя, которое присоединяет tablename_base к
table_name_allowed_user, с
выберите * из таблицы name_base и
user_id из tablename_allowed_user.
Эта точка зрения должна соответствовать Oracle
Требования должны быть по своей сути
обновляемым. "
Теперь самое сложное. Вам нужно добавить «и user_id = $ user_id» к каждому запросу. Найдите различные функции, которые вы используете для выполнения запросов. Оберните эти функции в те, которые получают идентификатор пользователя из сеанса, и добавьте этот предикат.
Один из приемлемых способов сделать это - прочитать строку выбора, найти все «где» (для подзапросов может быть больше одного) и заменить ее словами «где (пользователь = $ пользователь) и». Для запросов, которые не имеют где, вам нужно вставить это перед любой «группировки по» или «упорядочить по». Это хрупко, поэтому, очевидно, вы протестируете, что это работает для всех страниц (у вас есть автоматический тест для всех страниц, верно?), И добавите хаки, чтобы покрыть особые случаи.
операторы "update" не должны будут меняться; «insert» предположительно вставит оба в представление, а затем выполнит отдельную вставку в таблицу «allow_user» таблицы с идентификатором вставляющего пользователя, чтобы автоматически предоставить вставляющему пользователю доступ к вставленному им.
Если ваше количество пользователей более ограничено или вы ограничиваете типы пользователей, вы можете использовать стратегию нескольких представлений, названную для пользователя или типа; тогда вы замените имена таблиц в запросах соответствующими представлениями.