array($perm)) * * @var array */ private $grants; /** * Array ($perm => 1); * @var array */ private $idx; /** * Grant permissions temporarily. * * @param string|array $perms * List of permissions to apply. * @return string|int * A handle for the grant. Useful for revoking later on. */ public function grant($perms) { $perms = (array) $perms; $id = self::$id++; $this->grants[$id] = $perms; $this->idx = $this->index($this->grants); return $id; } /** * Revoke a previously granted permission. * * @param string|int $id * The handle previously returned by grant(). */ public function revoke($id) { unset($this->grants[$id]); $this->idx = $this->index($this->grants); } /** * Determine if a permission has been granted. * * @param string $perm * The permission name (e.g. "view all contacts"). * @return bool */ public function check($perm) { return (isset($this->idx['administer CiviCRM']) || isset($this->idx[$perm])); } /** * Generate an optimized index of granted permissions. * * @param array $grants * Array(string $permName). * @return array * Array(string $permName => bool $granted). */ protected function index($grants) { $idx = []; foreach ($grants as $grant) { foreach ($grant as $perm) { $idx[$perm] = 1; } } return $idx; } }