У меня есть одна таблица БД MySQL, подобная следующей, таблица ресурсов :
+----+-----------+------------+
| id | name | type |
+----+-----------+------------+
| 1 | guest | user |
| 2 | member | user |
| 3 | moderator | user |
| 4 | owner | user |
| 5 | admin | user |
| 6 | index | controller |
+----+-----------+------------+
На следующую таблицу, таблица правил :
+----+---------+------+-------------+----------------------+
| id | user_id | rule | resource_id | extras |
+----+---------+------+-------------+----------------------+
| 1 | 2 | 3 | 1 | null |
| 2 | 3 | 3 | 2 | null |
| 3 | 4 | 3 | 3 | null |
| 4 | 5 | 3 | 4 | null |
| 5 | 6 | 1 | 1 | index,login,register |
| 6 | 6 | 2 | 2 | login,register |
| 7 | 6 | 1 | 2 | logout |
+----+---------+------+-------------+----------------------+
Хорошо, извините за длину, но я пытаюсь дать полное представление о том, что я пытаюсь сделать.
Таким образом, как это работает, роль (он же пользователь) может быть предоставлена (правило: 1) доступ к контроллеру, роль может наследовать (правило: 3) доступ из другой роли или роли и отказано (правило: 2) доступ к контроллеру. (A пользователь - это ресурс, а контроллер - это ресурс)
Доступ к действиям предоставляется / запрещается с помощью столбца «Дополнительно».
Это все работает, это не проблема с настройкой ACL в Zend.
Что я сейчас пытаюсь сделать, это показать отношения; для этого мне нужно найти самый низкий уровень, которому роли предоставляется доступ к остановке контроллера, если он был явно удален. Я планирую перечислить роли. Когда я нажимаю на роль, я хочу, чтобы она показывала все контроллеры, к которым у этой роли есть доступ. Затем щелчок по контроллеру показывает действия, которые разрешено выполнять роли.
Таким образом, в приведенном выше примере гостю разрешено просматривать действие index контроллера индекса вместе с действием login.
Член наследует тот же доступ, но затем ему отказывают в доступе к действию входа в систему и действию регистрации.
Модератор наследует правила участника.
Так что, если бы я выбрал роль модератора. Я хочу видеть индекс контроллера в списке. Если я нажимаю на контроллер, он должен показывать разрешенные действия как action: index. (который был первоначально предоставлен гостю, но с тех пор не был отклонен)
Есть ли примеры для этого? Я очевидно работаю с Zend MVC (PHP) и MySQL.
Даже простой пример кода персудо будет полезной отправной точкой - это одна из последних частей мозаики, которую я собираю.
P.S. Очевидно, что у меня есть объект ACL - будет ли легче его интегрировать или лучше сделать это самостоятельно через PHP / MySQL?
Цель состоит в том, чтобы показать, к какой роли может получить доступ, что затем позволит мне добавить или отредактировать роль, контроллер и действие в стиле графического интерфейса пользователя (это довольно просто) - в настоящее время я обновляю БД вручную, как я строил сайт.