Chris@0: isAdmin()) { Chris@0: return []; Chris@0: } Chris@0: return $this->permissions; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getWeight() { Chris@0: return $this->get('weight'); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function setWeight($weight) { Chris@0: $this->set('weight', $weight); Chris@0: return $this; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function hasPermission($permission) { Chris@0: if ($this->isAdmin()) { Chris@0: return TRUE; Chris@0: } Chris@0: return in_array($permission, $this->permissions); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function grantPermission($permission) { Chris@0: if ($this->isAdmin()) { Chris@0: return $this; Chris@0: } Chris@0: if (!$this->hasPermission($permission)) { Chris@0: $this->permissions[] = $permission; Chris@0: } Chris@0: return $this; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function revokePermission($permission) { Chris@0: if ($this->isAdmin()) { Chris@0: return $this; Chris@0: } Chris@0: $this->permissions = array_diff($this->permissions, [$permission]); Chris@0: return $this; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function isAdmin() { Chris@0: return (bool) $this->is_admin; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function setIsAdmin($is_admin) { Chris@0: $this->is_admin = $is_admin; Chris@0: return $this; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public static function postLoad(EntityStorageInterface $storage, array &$entities) { Chris@0: parent::postLoad($storage, $entities); Chris@0: // Sort the queried roles by their weight. Chris@0: // See \Drupal\Core\Config\Entity\ConfigEntityBase::sort(). Chris@0: uasort($entities, 'static::sort'); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function preSave(EntityStorageInterface $storage) { Chris@0: parent::preSave($storage); Chris@0: Chris@0: if (!isset($this->weight) && ($roles = $storage->loadMultiple())) { Chris@0: // Set a role weight to make this new role last. Chris@0: $max = array_reduce($roles, function ($max, $role) { Chris@0: return $max > $role->weight ? $max : $role->weight; Chris@0: }); Chris@0: $this->weight = $max + 1; Chris@0: } Chris@0: Chris@0: if (!$this->isSyncing()) { Chris@0: // Permissions are always ordered alphabetically to avoid conflicts in the Chris@0: // exported configuration. Chris@0: sort($this->permissions); Chris@0: } Chris@0: } Chris@0: Chris@0: }