LINUX.ORG.RU

Управления доступом к ресурсам по сложным правилам.

 , , , ,


1

1

Добрый день. Нужно разработать систему контроля доступа для существующего проекта. Если кратко, нужно разграничение прав доступа к таблицам БД, но на основе сложных бизнес правил, иначе просто взял бы RBAC и нет проблем.

Привожу пример:

Есть таблица Y. Юзер1 может:

  Читать и редактировать записи таблицы Y:
  НО только записи, где Y.group = 1, 2, 3;
  При чем:
  Если Y.group = 1 :
    Y.type может принимать только значение 3
    И при Y.type = 3:
    Y.status может принимать только значениеe 1 ИЛИ 2
  и т. д. для group 2, 3
Т.е. схематически:
Y.group(1) => Y.type(3) => Y.status(1) ИЛИ Y.status(2)

Права будут хранится в MySQL и нужно будет сделать веб гуй для редактирования правил, т.е. правила нельзя статично захардкодить. Язык - PHP.

Может подскажите как лучше спроектировать? Или, что еще лучше, готовое решение.

Из того, что я нашел - ABAC выглядит достаточно похоже на то, что мне нужно, но:

  1. Как в нем выразить сложное условие из примера.
  2. Для php есть всего одна реализация и та очень куцая.

А что будет обеспечивать выполнение правил? Если проект существующий и в нём не предусмотрено разграничений, то без существенных переделок не обойтись, мне кажется.

Elyas ★★★★★
()
Ответ на: комментарий от Elyas

А что будет обеспечивать выполнение правил?

В каком смысле? Извините, не очень понял вопроса.

Если проект существующий и в нём не предусмотрено разграничений, то без существенных переделок не обойтись, мне кажется.

Там все в достаточно начальном состоянии, так что переделки возможны. Про «существующий», пожалуй, я зря сказал.

Raziel
() автор топика

Если ABAC подходит, то всё очень зависит от того, насколько развесистые правила для доступа требуются. Если отталкиваться от примера, то можно придумать очень даже «в лоб» нечто такое - сохраняем объект доступа (таблицу, в данном случае), субъекта - (пользователя или группу), действие - (чтение, запись, оба сразу) и набор «правил». Правила генерируем из GUI, сохраняем в любом удобном виде, потом «подклеиваем» их к запросу, вытаскивающему нужные данные (если нужно отдельно запись разграничивать, то делаем предвыборку, сравниваем). Это если очень «в лоб», и, скажем, большие выборки и реляционная СУБД внизу.

undertaker ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.