File manager - Edit - /home/linknsbh/cecil-hotel.net/vendor/botble/platform/acl/src/Traits/PermissionTrait.php
Back
<?php namespace Botble\ACL\Traits; use Illuminate\Support\Str; trait PermissionTrait { protected array|null $preparedPermissions = null; public function updatePermission(string $permission, bool $value = true, bool $create = false): static { if (! $this->permissions) { $this->addPermission($permission, $value); } if (array_key_exists($permission, (array)$this->permissions)) { $permissions = $this->permissions; $permissions[$permission] = $value; $this->permissions = $permissions; } elseif ($create) { $this->addPermission($permission, $value); } return $this; } public function addPermission(string $permission, bool $value = true): static { if (! $this->permissions) { $this->permissions = [$permission => $value]; return $this; } if (! array_key_exists($permission, (array)$this->permissions)) { $this->permissions = array_merge($this->permissions, [$permission => $value]); } return $this; } public function removePermission(string $permission): static { if (! $this->permissions) { return $this; } if (array_key_exists($permission, (array)$this->permissions)) { $permissions = $this->permissions; unset($permissions[$permission]); $this->permissions = $permissions; } return $this; } public function hasPermission(string|array $permissions): bool { if (is_string($permissions)) { $permissions = func_get_args(); } $prepared = $this->getPreparedPermissions(); foreach ($permissions as $permission) { if (! $this->checkPermission($prepared, $permission)) { return false; } } return true; } protected function getPreparedPermissions(): array { if ($this->preparedPermissions === null) { $this->preparedPermissions = $this->createPreparedPermissions(); } return $this->preparedPermissions; } protected function createPreparedPermissions(): array { $prepared = []; if (! empty($this->permissions)) { $this->preparePermissions($prepared, $this->permissions); } return $prepared; } protected function preparePermissions(array &$prepared, array $permissions): void { foreach ($permissions as $keys => $value) { foreach ($this->extractClassPermissions($keys) as $key) { // If the value is not in the array, we're opting in if (! array_key_exists($key, $prepared)) { $prepared[$key] = $value; continue; } // If our value is in the array and equals false, it will override if ($value === false) { $prepared[$key] = false; } } } } /** * Takes the given permission key and inspects it for a class & method. If * it exists, methods may be comma-separated, e.g. Class@method1,method2. */ protected function extractClassPermissions(string $key): array { if (! Str::contains($key, '@')) { return (array)$key; } $keys = []; [$class, $methods] = explode('@', $key); foreach (explode(',', $methods) as $method) { $keys[] = $class . '@' . $method; } return $keys; } /** * Checks a permission in the prepared array, including wildcard checks and permissions. */ protected function checkPermission(array $prepared, string $permission): bool { if (array_key_exists($permission, $prepared) && $prepared[$permission] === true) { return true; } foreach ($prepared as $key => $value) { if ((Str::is($permission, $key) || Str::is($key, $permission)) && $value === true) { return true; } } return false; } public function hasAnyPermission(array|string $permissions): bool { if (is_string($permissions)) { $permissions = func_get_args(); } $prepared = $this->getPreparedPermissions(); foreach ($permissions as $permission) { if ($this->checkPermission($prepared, $permission)) { return true; } } return false; } }
| ver. 1.4 |
Github
|
.
| PHP 8.2.31 | Generation time: 0.69 |
proxy
|
phpinfo
|
Settings