public function assert(Acl $acl, RoleInterface $role = null, ResourceInterface $resource = null, $privilege = null)
 {
     if ($this->preAssert($acl, $role, $resource, $privilege)) {
         $event = new AssertionEvent(null, $this);
         $event->setAcl($acl)->setRole($role)->setResource($resource)->setPrivilege($privilege);
         $events = $this->getEventManager();
         $results = $events->triggerUntil($event, function ($r) {
             return false === $r;
         });
         return false === $results->last() ? false : true;
         // result must be BOOLEAN false (not "", null or 0)
     }
     return false;
 }
 public function assert(Acl $acl, RoleInterface $role = null, ResourceInterface $resource = null, $privilege = null)
 {
     $preCheck = $this->preAssert($acl, $role, $resource, $privilege);
     if (is_bool($preCheck)) {
         return $preCheck;
     }
     $event = new AssertionEvent(null, $this);
     $event->setAcl($acl)->setRole($role)->setResource($resource)->setPrivilege($privilege);
     $events = $this->getEventManager();
     $results = $events->trigger($event, function ($r) {
         return false === $r;
     });
     return false === $results->last() ? false : true;
     // result must be BOOLEAN false (not "", null or 0 or any other value evaluated to FALSE)
 }