コード例 #1
0
ファイル: Acl.php プロジェクト: Theodia/theodia.org
 public function __construct(AclAuthorization $authorization)
 {
     $authorization->addRole('member');
     $authorization->addRole('admin');
     $restrictedPrivileges = [Request::METHOD_PUT, Request::METHOD_PATCH, Request::METHOD_DELETE];
     $hasNoRelation = new HasNoRelation();
     $authorization->deny('member', 'Theodia\\V1\\Rest\\Calendar\\Controller::entity', $restrictedPrivileges, $hasNoRelation);
     $authorization->deny('member', 'Theodia\\V1\\Rest\\Event\\Controller::entity', $restrictedPrivileges, $hasNoRelation);
     $authorization->deny('member', 'Theodia\\V1\\Rest\\Place\\Controller::entity', $restrictedPrivileges, $hasNoRelation);
     $authorization->deny('member', 'Theodia\\V1\\Rest\\User\\Controller::entity', $restrictedPrivileges, $hasNoRelation);
     $authorization->deny('member', 'Theodia\\V1\\Rest\\PlaceType\\Controller::entity', $restrictedPrivileges);
     $authorization->deny('member', 'Theodia\\V1\\Rest\\Rite\\Controller::entity', $restrictedPrivileges);
     $authorization->deny('member', 'Theodia\\V1\\Rest\\Tag\\Controller::entity', $restrictedPrivileges);
     $relationRestrictedPrivileges = [Request::METHOD_PUT, Request::METHOD_PATCH];
     $lastRelation = new LastRelation();
     $hasNoRelationOrLastRelation = new AssertionAggregate();
     $hasNoRelationOrLastRelation->addAssertion($hasNoRelation);
     $hasNoRelationOrLastRelation->addAssertion($lastRelation);
     $hasNoRelationOrLastRelation->setMode(AssertionAggregate::MODE_AT_LEAST_ONE);
     $authorization->deny('member', 'Theodia\\V1\\Rest\\UserCalendar\\Controller::entity', $relationRestrictedPrivileges, $hasNoRelation);
     $authorization->deny('member', 'Theodia\\V1\\Rest\\UserPlace\\Controller::entity', $relationRestrictedPrivileges, $hasNoRelation);
     $authorization->deny('member', 'Theodia\\V1\\Rest\\UserCalendar\\Controller::entity', [Request::METHOD_DELETE], $hasNoRelationOrLastRelation);
     $authorization->deny('member', 'Theodia\\V1\\Rest\\UserPlace\\Controller::entity', [Request::METHOD_DELETE], $hasNoRelationOrLastRelation);
     $authorization->deny('admin', 'Theodia\\V1\\Rest\\UserCalendar\\Controller::entity', [Request::METHOD_DELETE], $lastRelation);
     $authorization->deny('admin', 'Theodia\\V1\\Rest\\UserPlace\\Controller::entity', [Request::METHOD_DELETE], $lastRelation);
     $authorization->deny('member', 'Theodia\\V1\\Rest\\UserCalendar\\Controller::collection', [Request::METHOD_POST], $hasNoRelation);
     $authorization->deny('member', 'Theodia\\V1\\Rest\\UserPlace\\Controller::collection', [Request::METHOD_POST], $hasNoRelation);
 }
コード例 #2
0
ファイル: Module.php プロジェクト: vcomedia/vco-zf-auth-acl
 /**
  * @description Initialise ACL for all modules/controllers/actions
  * @param MvcEvent $e
  */
 public function initAcl(MvcEvent $e, $config)
 {
     $app = $e->getApplication();
     $eventManager = $app->getEventManager();
     $serviceManager = $app->getServiceManager();
     $aclService = $serviceManager->get('VcoZfAuthAcl\\Service\\AclServiceInterface');
     $acl = $aclService->getAcl();
     /* @var $acl Acl */
     //deny everything by default
     $acl->deny();
     //add roles
     $roles = $config['acl']['roles'];
     if (count($roles) > 0) {
         foreach ($roles as $roleName => $roleParent) {
             if ($roleName == '') {
                 throw new \Exception('Role name can not be empty');
             }
             $role = new GenericRole($roleName);
             $acl->addRole($role, $roleParent);
         }
     }
     //add resources
     $resources = $config['acl']['resources'];
     if (count($resources) > 0) {
         foreach ($resources as $moduleName => $moduleResources) {
             $moduleName = strtolower($moduleName);
             if (!$acl->hasResource($moduleName)) {
                 $acl->addResource(new GenericResource($moduleName));
             }
             if (count($moduleResources) > 0) {
                 foreach ($moduleResources as $moduleResource) {
                     $moduleResource = strtolower($moduleResource);
                     if (!$acl->hasResource($moduleResource)) {
                         $acl->addResource(new GenericResource($moduleResource), $moduleName);
                     }
                 }
             }
         }
     }
     //allows
     $allows = $config['acl']['allow'];
     if (count($allows) > 0) {
         foreach ($allows as $allow) {
             $assertionsConfig = $allow['assertions'];
             $assertion = null;
             if (is_array($assertionsConfig) && count($assertionsConfig) > 0) {
                 $assertion = new AssertionAggregate();
                 foreach ($assertionsConfig as $assertClassName) {
                     $assertion->addAssertion(new $assertClassName());
                 }
             } else {
                 if (is_string($assertionsConfig) && !empty($assertionsConfig)) {
                     $assertion = new $assertionsConfig();
                 }
             }
             $acl->allow($allow['roles'], $allow['resources'], $allow['privileges'], $assertion);
         }
     }
     //denials
     $denials = $config['acl']['deny'];
     if (count($denials) > 0) {
         foreach ($denials as $denial) {
             $assertionsConfig = $denial['assertions'];
             $assertion = null;
             if (is_array($assertionsConfig) && count($assertionsConfig) > 0) {
                 $assertion = new AssertionAggregate();
                 foreach ($assertionsConfig as $assertClassName) {
                     $assertion->addAssertion(new $assertClassName());
                 }
             } else {
                 if (is_string($assertionsConfig) && !empty($assertionsConfig)) {
                     $assertion = new $assertionsConfig();
                 }
             }
             $acl->deny($denial['roles'], $denial['resources'], $denial['privileges'], $assertion);
         }
     }
 }
コード例 #3
0
ファイル: AbstractGuard.php プロジェクト: coolms/acl
 /**
  * @param string|array|AssertionInterface $assertion
  * @return null|AssertionInterface
  */
 protected function normalizeAssertion($assertion)
 {
     if (!$assertion) {
         return;
     }
     if ($assertion instanceof AssertionInterface) {
         return $assertion;
     }
     $assertion = (array) $assertion;
     if (count($assertion) > 1) {
         $assertionAggregate = new AssertionAggregate();
         foreach ($ruleData['assertion'] as $plugin) {
             if (is_string($plugin) && $this->assertionPluginManager->has($plugin)) {
                 $plugin = $this->assertionPluginManager->get($plugin);
             }
             if ($plugin instanceof AssertionInterface) {
                 $assertionAggregate->addAssertion($plugin);
             }
         }
         return $assertionAggregate;
     }
     $assertion = reset($assertion);
     if (!$assertion instanceof AssertionInterface) {
         if (is_string($assertion) && $this->assertionPluginManager->has($assertion)) {
             $assertion = $this->assertionPluginManager->get($assertion);
         } else {
             $assertion = null;
         }
     }
     return $assertion;
 }