У меня есть одна таблица базы данных 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) контроллеру, а роль может < strong> наследовать (правило: 3) доступ от другой роли или роли и получать отказ (правило: 2) в доступе к контроллер. (пользователь - это ресурс, а контроллер - это ресурс)
Доступ к действиям разрешен / запрещен с помощью столбца extras.
Все это работает, это не проблема с настройкой ACL в zend.
Сейчас я пытаюсь показать отношения; для этого мне нужно найти самый низкий уровень, на котором роли предоставляется доступ к остановке контроллера, если он был явно удален. Я планирую перечислить роли. Когда я щелкаю роль, я хочу, чтобы она показывала все контроллеры, к которым эта роль имеет доступ. Затем щелчок по контроллеру показывает действия, которые может выполнять роль.
Итак, в приведенном выше примере гостю разрешено просматривать действие index контроллера индекса вместе с действием входа в систему. Член наследует тот же доступ, но затем ему отказывают в доступе к действию входа в систему и действию регистрации. Модератор наследует правила участника.
Так что если бы мне пришлось выбрать роль модератора. Я хочу увидеть в списке указатель контроллера. Если я нажму на контроллер, он должен показать разрешенные действия как action: index. (который изначально был предоставлен гостю, но с тех пор не был запрещен)
Есть какие-нибудь примеры этого? Очевидно, я работаю с Zend MVC (PHP) и MySQL. Даже простой пример кода Persudo был бы полезной отправной точкой - это одна из последних частей мозаики, которую я собираю.
P.S. Очевидно, что у меня есть объект ACL - будет ли проще его встроить или лучше сделать это самому через PHP / MySQL?
Цель будет заключаться в том, чтобы показать, к чему может получить доступ роль, которая затем позволит мне добавлять или редактировать роль, контроллер и действие в стиле графического интерфейса (это довольно простой вариант) - в настоящее время я обновляю БД вручную как Я занимаюсь созданием сайта.