Я использую простой ACL, вдохновленный это видео урок. acl.global.php
имеет структуру как
return [
'acl' => [
'roles' => [
'guest' => null,
'member' => 'guest',
'admin' => 'member'
],
'resources' => [
'allow' => [
'Application\Controller\Index' => ['all' => 'member'],
'Application\Controller\Error' => ['all' => 'member'],
'Item\Controller\Process' => [
'index' => 'member',
'create' => 'member',
'showItem' => 'member', // website.tld/item/:id
'showList' => 'member' // website.tld/list-items
]
]
],
'redirect_route' => [
'params' => [],
'options' => ['name' => 'error403']
]
]
];
Есть Authorization\Acl\Acl
класс, который расширяется Zend\Permissions\Acl\Acl
и добавляет к нему функциональность для настройки объекта, используя данные из файла конфигурации выше.
Третий и последний актер Authorization\Module
учебный класс. Там обработка ACL добавляется как route
слушатель события и в этом методе слушателя if (! $acl->isAllowed($role, $controller, $action))
пользователь получает 403
Код состояния HTTP и соответствующий вид.
Теперь я хочу дополнительно ограничить доступ пользователей к элементам (статьи, заказы, комментарии и т. Д.). Пользователь должен видеть только детальный вид item
(showItemAction
), если он является его владельцем / автором. Как интегрировать такую логику в ACL?
Задача ещё не решена.
Других решений пока нет …