Skip to content

Instantly share code, notes, and snippets.

@ppeiris
Last active January 3, 2016 04:39
Show Gist options
  • Save ppeiris/8410284 to your computer and use it in GitHub Desktop.
Save ppeiris/8410284 to your computer and use it in GitHub Desktop.
<?php
namespace OappAccessControl;
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
use Zend\ServiceManager\ServiceLocatorAwareInterface;
use Zend\Permissions\Acl\Acl as AccessControlList;
use Zend\Permissions\Acl\Role\GenericRole as Role;
use Zend\Permissions\Acl\Resource\GenericResource as Resource;
use Zend\EventManager\EventManagerAwareInterface;
use Zend\EventManager\EventManagerInterface;
use Zend\EventManager\EventManager;
class AclService implements FactoryInterface
{
const ASSERTION_CLASS_FOR_NULL_RESOURCE = "OappAccessControl\Assertion\ResourceAccess";
public function createService (ServiceLocatorInterface $serviceLocator)
{
$entityManager = $serviceLocator->get('Doctrine\ORM\EntityManager');
#$aclConfig = $config['acl'];
$aclRoles = $entityManager->getRepository('Oapp\entity\Authorize\AclRole');
$aclResources = $entityManager->getRepository('Oapp\entity\Authorize\AclResource');
$aclRules = $entityManager->getRepository('Oapp\entity\Authorize\AclRules');
$acl = new AccessControlList();
// Add all of the roles
foreach ($aclRoles->findAll() as $role) {
$acl->addRole(
new Role($role->getName()), // role name
(is_object($role->parent())) ? $role->parent()->getName() : null // parent role Name | null
);
}
// Add all the resources
foreach ($aclResources->findAll() as $key => $resource) {
if (!$acl->hasResource($resourceName = $resource->getName())) {
$acl->addResource($resourceName);
}
}
// Add all the acl rules
foreach ($aclRules->findAll() as $rule) {
//get the assertion Class Key
$ruleResourceAssertionClassKey = is_null($rule->getResource()) ? self::ASSERTION_CLASS_FOR_NULL_RESOURCE : (is_null($assersionClass = $rule->getResource()->getAssertionClass()) ? null : $assersionClass);
$acl->{$rule->getAction()}( // allow | deny
is_null($rule->getRole()) ? null : $rule->getRole()->getName(), // Role null | roleName
is_null($rule->getResource()) ? null : $rule->getResource()->getName(), //Resources null | resource Name
$rule->getPermissions(), // Permissions
is_null($ruleResourceAssertionClassKey) ? null : (($serviceLocator->has($ruleResourceAssertionClassKey)) ? $serviceLocator->get($ruleResourceAssertionClassKey) : null) //Assertion class Object | null
);
}
return $acl;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment