public function inherit(PermissionsInterface $permissions, $build = true) { /* @var $permissions Permissions */ $assigned = $permissions->getAssigned(); $resources = $permissions->getResources(); /* * Grant resource references permissions. */ foreach ($resources as $resource) { /* @var $resource PermissionsResourceInterface */ $permission = $permissions->getFrom($resource); $this->grant($resource, $permission, false); unset($assigned[$resource->getPermissionsResourceId()]); } /* * Merge remaining user permissions (w/o resource references) */ $this->assigned = array_merge($this->assigned, $assigned); if ($build) { $this->build(); } $this->hasChanged = true; return $this; }
public function inherit(PermissionsInterface $permissions, $build = true) { // Override permissions type temporarly to get the right permissions back // from resources which may be aware of the permissions type. // Maybe this must be controllable by an additional parameter, but for now // we make this default. $oldType = $this->type; $this->type = $permissions->getType(); /* @var $permissions Permissions */ $assigned = $permissions->getAssigned(); $resources = $permissions->getResources(); /* * Grant resource references permissions. */ foreach ($resources as $resource) { /* @var $resource PermissionsResourceInterface */ $permission = $permissions->getFrom($resource); $this->grant($resource, $permission, false); unset($assigned[$resource->getPermissionsResourceId()]); } /* * Merge remaining user permissions (w/o resource references) */ $this->assigned = array_merge($this->assigned, $assigned); if ($build) { $this->build(); } $this->hasChanged = true; // restore orginial permissions type $this->type = $oldType; return $this; }