Содержание


Расширенное использование


Advanced Usage, ACL, ЗФ2, Zend Framework 2, ZF2, ру, ru




Сохранение данных ACL



 

Компонент Zend\Permissions\Acl был создан таким образом, что не требует никакого внешнего хранилища данных, как база данных, кэш на сервере или др. Это исключительно и полностью PHP реализация, которая позволяет с легкостью строить инструменты для администрирования. Во многих случаях необходимо настраивать и перенастраивать конфигурацию приложения ACL  на лету.

 

Сохранение и извлечение данных ACL ложится полностью на разработчика, так как эта процедура отличается от реализации к реализации. ACL объекты являются сериализироваными, поэтому можно, например, сериализировать  с помощью PHP функции «serialize()», и хранить результат в чем угодно: файл, БД, кэш и т.д.

 

 

Написание условных правил ACL с утверждениями



 

Часто, правила разрешающие или запрещающие доступ роли к различным ресурсам не могут быть абсолютными и зависят от разных критериев. Например, определенный доступ должен быть разрешен только с 8 до 18 часов. Или некоторые ресурсы должны быть закрыты из-за IP адреса, который помечен как «плохой».  В Zend\Permissions\Acl\Acl существует поддержка организации правил доступа основанных на чем угодно разработчику.

 

Zend\Permissions\Acl\Acl предоставляет поддержку условных правил через Zend\Permissions\Acl\Assertion\AssertionInterface.  Для того, что б использовать этот интерфейс, разработчику необходимо написать класс, реализующий метод «assert()» этого интерфейса:

class CleanIPAssertion implements Zend\Permissions\Acl\AssertionAssertionInterface
{
    public function assert(Zend\Permissions\Acl $acl,
                           Zend\Permissions\Acl\RoleRoleInterface $role = null,
                           Zend\Permissions\Acl\ResourceResourceInterface $resource = null, 
                           $privilege = null)
    {
        return $this->_isCleanIP($_SERVER['REMOTE_ADDR']);
    }
 
    protected function _isCleanIP($ip)
    {
        // ...
    }
}

После утверждения класс доступен, разработчик должен предоставить экземпляр утверждения класса при назначении условного правила. Правило создается с утверждением и применяется только в случае возвращениям методов assert значения «TRUE»

use Zend\Permissions\Acl\Acl;
 
$acl = new Acl();
$acl->allow(null, null, null, new CleanIPAssertion());

Пример выше создает условные правила, разрешающие доступ  ко всем привилегиям, для всех, за исключением, когда IP, с которого производится запрос находится в черном списке.

 

Метод «assert()» передает в ACL роли, ресурсы, привилегии к которым будут применены правила при запросе на разрешение.


Автор статьи: DuB