DependencyInjection

October 13, 2018 ยท View on GitHub

In order to allow you to extend the library, a proper dependency injection was set.

You're able to replace each component of the Abac library.

The normal way to get the library and enforce your rules is:

<?php
    use PhpAbac\AbacFactory;

    $abac = AbacFactory::getAbac();

This factory method creates an Abac instance with its default dependencies.

But you can replace one of them with your own component.

You just have to make your new component implement the dependency interface.

<?php
// src/my-app/Cache/MyCacheManager.php

use PhpAbac\Manager\CacheManagerInterface;

class MyCacheManager implements CacheManagerInterface
{
    // implement the interface methods
}
<?php
// src/my-app/Controller/MyController.php

use PhpAbac\AbacFactory;

$cacheManager = new MyCacheManager();

AbacFactory::setCacheManager($cacheManager);
AbacFactory::getAbac();

Here are the available interfaces:

  • PhpAbac\Configuration\ConfigurationInterface
  • PhpAbac\Manager\PolicyRuleManagerInterface
  • PhpAbac\Manager\AttributeManagerInterface
  • PhpAbac\Manager\CacheManagerInterface
  • PhpAbac\Manager\ComparisonManagerInterface

Each of this component has a dedicated setter in the factory.