Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 16 additions & 11 deletions packages/actions/src/Concerns/CanBeAuthorized.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Gate;
use LogicException;
use UnitEnum;

trait CanBeAuthorized
{
Expand All @@ -20,16 +21,18 @@ trait CanBeAuthorized

protected bool | Closure $hasAuthorizationNotification = false;

protected bool | string | Closure | null $authorizeIndividualRecords = null;
protected bool | string | UnitEnum | Closure | null $authorizeIndividualRecords = null;

/**
* @param Model | class-string | array<mixed> | null $arguments
*/
public function authorize(mixed $abilities, Model | string | array | null $arguments = null): static
{
if ($abilities instanceof BackedEnum) {
$abilities = $abilities->value;
}
$abilities = match (true) {
$abilities instanceof BackedEnum => $abilities->value,
$abilities instanceof UnitEnum => $abilities->name,
default => $abilities,
};

if (is_string($abilities) || is_array($abilities)) {
$this->authorization = [
Expand All @@ -45,14 +48,16 @@ public function authorize(mixed $abilities, Model | string | array | null $argum
}

/**
* @param string | BackedEnum | array<string> $abilities
* @param string | UnitEnum | array<string | UnitEnum> $abilities
* @param Model | array<mixed> | null $arguments
*/
public function authorizeAny(string | BackedEnum | array $abilities, Model | array | null $arguments = null): static
public function authorizeAny(string | UnitEnum | array $abilities, Model | array | null $arguments = null): static
{
if ($abilities instanceof BackedEnum) {
$abilities = $abilities->value;
}
$abilities = match (true) {
$abilities instanceof BackedEnum => $abilities->value,
$abilities instanceof UnitEnum => $abilities->name,
default => $abilities,
};

$this->authorization = [
'type' => 'any',
Expand Down Expand Up @@ -211,7 +216,7 @@ public function isAuthorizedOrNotHiddenWhenUnauthorized(): bool
return $this->isAuthorized();
}

public function authorizeIndividualRecords(bool | string | Closure | null $callback = true): static
public function authorizeIndividualRecords(bool | string | UnitEnum | Closure | null $callback = true): static
{
$this->authorizeIndividualRecords = $callback;

Expand All @@ -220,7 +225,7 @@ public function authorizeIndividualRecords(bool | string | Closure | null $callb

public function getIndividualRecordAuthorizationResponse(Model $record): Response
{
if (is_string($this->authorizeIndividualRecords)) {
if (is_string($this->authorizeIndividualRecords) || ($this->authorizeIndividualRecords instanceof UnitEnum)) {
return Gate::inspect($this->authorizeIndividualRecords, Arr::wrap($record));
}

Expand Down
4 changes: 2 additions & 2 deletions packages/panels/src/helpers.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
*
* @throws AuthorizationException
*/
function authorize(UnitEnum | string $action, Model | string $model, bool $shouldCheckPolicyExistence = true): Response
function authorize(string | UnitEnum $action, Model | string $model, bool $shouldCheckPolicyExistence = true): Response
{
return get_authorization_response($action, $model, $shouldCheckPolicyExistence)->authorize();
}
Expand All @@ -28,7 +28,7 @@ function authorize(UnitEnum | string $action, Model | string $model, bool $shoul
/**
* @param Model|class-string<Model> $model
*/
function get_authorization_response(UnitEnum | string $action, Model | string $model, bool $shouldCheckPolicyExistence = true): Response
function get_authorization_response(string | UnitEnum $action, Model | string $model, bool $shouldCheckPolicyExistence = true): Response
{
$user = Filament::auth()->user();

Expand Down
Loading