/**
  * Inject the ACL with the grant specified by a single rule set.
  *
  * @param AclAuthorization $acl
  * @param string $grantType
  * @param array $ruleSet
  * @return void
  */
 private static function injectGrant(AclAuthorization $acl, $grantType, array $ruleSet)
 {
     // Add new resource to ACL
     $resource = $ruleSet['resource'];
     $acl->addResource($ruleSet['resource']);
     // Deny guest specified privileges to resource
     $privileges = isset($ruleSet['privileges']) ? $ruleSet['privileges'] : null;
     // null privileges means no permissions were setup; nothing to do
     if (null === $privileges) {
         return;
     }
     $acl->{$grantType}('guest', $resource, $privileges);
 }
 public static function factory(array $config)
 {
     // Determine whether we are whitelisting or blacklisting
     $denyByDefault = false;
     if (array_key_exists('deny_by_default', $config)) {
         $denyByDefault = (bool) $config['deny_by_default'];
         unset($config['deny_by_default']);
     }
     // By default, create an open ACL
     $acl = new AclAuthorization();
     $acl->addRole('guest');
     $acl->allow();
     $grant = 'deny';
     if ($denyByDefault) {
         $acl->deny('guest', null, null);
         $grant = 'allow';
     }
     foreach ($config as $set) {
         if (!is_array($set) || !isset($set['resource'])) {
             continue;
         }
         // Add new resource to ACL
         $resource = $set['resource'];
         $acl->addResource($set['resource']);
         // Deny guest specified privileges to resource
         $privileges = isset($set['privileges']) ? $set['privileges'] : null;
         // "null" privileges means no permissions were setup; nothing to do
         if (null === $privileges) {
             continue;
         }
         $acl->{$grant}('guest', $resource, $privileges);
     }
     return $acl;
 }