Esempio n. 1
0
 /**
  * Returns true if the user has the permission.
  *
  * @param string $permission
  * @param null|Closure|AssertionInterface $assertion
  */
 public function isGranted($permission, $assertion = null)
 {
     $rbac = $this->getRbac();
     if ($assertion) {
         if ($assertion instanceof AssertionInterface) {
             if (!$assertion->assert($this)) {
                 return false;
             }
         } else {
             if (is_callable($assertion)) {
                 if (!$assertion($this)) {
                     return false;
                 }
             } else {
                 throw new InvalidArgumentException('Assertions must be a Closure or an instance of SpiffySecurity\\AssertionInterface');
             }
         }
     }
     foreach ($this->getIdentity()->getRoles() as $role) {
         $event = new Event();
         $event->setRole($role)->setPermission($permission)->setRbac($rbac);
         $this->getEventManager()->trigger(Event::EVENT_IS_GRANTED, $event);
         if ($rbac->getRole($role)->hasPermission($permission)) {
             return true;
         }
     }
     return false;
 }