Список контроля доступа для управления выбранными столбцами базы данных

У меня есть сайт, встроенный в codeigniter, для которого я разработал список контроля доступа для управления разрешениями различных типов пользователей. Различные пользователи, вошедшие на сайт:

  1. Супер Админ
  2. Администратор
  3. SEO пользователь
  4. разработчик

Теперь я завершил контроль доступа для этого, и разрешение на добавление, обновление, список и удаление может быть назначено каждому пользователю через модуль, доступный для Super Admin.

Теперь (это является частью нового требования клиента) Я хочу сделать столбцы доступными для определенных пользователей, например:

Если таблица продуктов имеет 4 столбца

Products :
id   |  Products | Price | Status
-----+-----------+-------+----------
1    |  prod1    | 20.0  |   1
2    |  prod2    | 35.6  |   0

Теперь я хочу, чтобы для пользователей SEO цена столбца не отображалась во время листинга.

ПРИМЕЧАНИЕ: это всего лишь пример, мне нужно сделать это динамическим, чтобы администратор контролировал, у кого есть разрешение на какой столбец. Я не могу просто написать логику If Else в моем View File, чтобы исключить ненужные столбцы.

Пожалуйста, скажите мне, как я могу сделать это без изменения всей системы или внесения очень серьезных изменений.

7

Решение

Ты можешь использовать ion_auth библиотека .. очень просто интегрировать и управлять пользователями и уровнями доступа …

1

Другие решения

Вот почему вы используете ACL. ACLS — это динамический способ хранения привилегий. Я надеюсь, что у вас есть модель пользователя. В этой модели вам необходимо прочитать ACL для текущего пользователя. Вы устанавливаете некоторые константы для уровня доступа, аналогично unix chmod. затем вы создаете массив, содержащий все столбцы и значение acl для этого столбца.

Для построения ваших запросов вы можете использовать такие методы, как

isSeo();

или же

hasAccess($tableName);

Конечно, это серьезное изменение, но я не знаю, как вы хотели бы реализовать списки ACL, которые изменяют ваш код.

0

Может быть, попробовать хранимую процедуру / функции или попробовать использовать сырой SQL, как это

GRANT SELECT(id,Products,Status) ON Products TO 'SEO User'@'somehost';
0
По вопросам рекламы [email protected]