Тут показан пример того как я закрыл доступ неавторизированным пользователям к внутренним разделам сайта при помощи ACL. Код был успешно скопипастен с http://ivangospodinow.com за что ему огромное спасибо.
Для начала создаем файл: module/Frontend/config/module.acl.roles.php
<?php //module/Frontend/config/module.acl.roles.php return array( 'guest'=> array( 'index', 'register', ), 'auth'=> array( 'about', 'inquiry', ), );'index', 'register' и т.д. - это роуты контроллеров для которых я устанавливаю правила. Далее в файле module.php прописываем следуещее:
public function onBootstrap(MvcEvent $e)
{
// common code....
$this -> initAcl($e);
$e->getApplication()
->getEventManager()
->attach('route', array($this, 'checkAcl'));
}
public function initAcl(MvcEvent $e) {
$acl = new \Zend\Permissions\Acl\Acl();
$roles = include __DIR__ . '/config/module.acl.roles.php';
$allResources = array();
foreach ($roles as $role => $resources) {
$role = new \Zend\Permissions\Acl\Role\GenericRole($role);
$acl -> addRole($role);
$allResources = array_merge($resources, $allResources);
//adding resources
foreach ($resources as $resource) {
$acl -> addResource(new \Zend\Permissions\Acl\Resource\GenericResource($resource));
}
//adding restrictions
foreach ($allResources as $resource) {
$acl -> allow($role, $resource);
}
}
$e -> getViewModel() -> acl = $acl;
}
public function checkAcl(MvcEvent $e) {
$route = $e -> getRouteMatch() -> getParam('__CONTROLLER__');
//you set your role
$userRole = 'guest';
if ($e -> getViewModel() -> acl ->hasResource($route) && !$e -> getViewModel() -> acl -> isAllowed($userRole, $route)) {
$response = $e -> getResponse();
//location to page or what ever
$response -> getHeaders() -> addHeaderLine('Location', $e -> getRequest() -> getBaseUrl() . '/');
$response -> setStatusCode(303);
}
}
собственно из самого кода многое становится понятным и модифицировать его под себя не составит труда.
P.S. Прошу прощение за форматирование кода, в ближайшее время настрою скрипты.
Комментариев нет:
Отправить комментарий