code: public function grant($resource, $permission = null, $build = true)
      {
          if (is_array($resource)) {
              foreach ($resource as $r) {
                  $this->grant($r, $permission, false);
              }
              if ($build) {
                  $this->build();
              }
              return $this;
          }
  
          //new \Doctrine\ODM\MongoDB\
          true === $permission
          || (null === $permission && $resource instanceof PermissionsResourceInterface)
          || $this->checkPermission($permission);
          
          $resourceId = $this->getResourceId($resource);
          
          if (true === $permission) {
              $permission = $this->getFrom($resource);
          }
          
          if (self::PERMISSION_NONE == $permission) {
              if ($resource instanceof PermissionsResourceInterface) {
                  $refs = $this->getResources();
                  if ($refs->contains($resource)) {
                      $refs->removeElement($resource);
                  }
              }
              unset($this->assigned[$resourceId]);
          } else {
              if ($resource instanceof PermissionsResourceInterface) {
                  $spec = $resource->getPermissionsUserIds($this->type);
                  if (!is_array($spec) || !count($spec)) {
                      $spec = array();
                  } elseif (is_numeric(key($spec))) {
                      $spec = array($permission => $spec);
                  }
              } else {
                  $spec = array($permission => $resource instanceof UserInterface ? array($resource->getId()) : array($resource));
              }
  
              $this->assigned[$resourceId] = $spec;
  
              if ($resource instanceof PermissionsResourceInterface) {
                  try {
                      $refs = $this->getResources();
                      if (!$refs->contains($resource)) {
                          $refs->add($resource);
                      }
                  } catch (\Exception $e) {
                  };
              }
          }
          
          if ($build) {
              $this->build();
          }
          $this->hasChanged = true;
          return $this;
      }
docs: Grants a permission to a user or resource.
  
  {@inheritDoc}
  
  @param bool $build Should the view and change arrays be rebuild?