Skip to content

Commit 8eb9577

Browse files
authored
Merge pull request #2890 from imhayatunnabi/feat/add-backed-enum-support-to-role-or-permission-middleware
Add BackedEnum Support to RoleOrPermissionMiddleware
2 parents 05b813b + 6d81b58 commit 8eb9577

File tree

1 file changed

+24
-5
lines changed

1 file changed

+24
-5
lines changed

src/Middleware/RoleOrPermissionMiddleware.php

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,7 @@ public function handle($request, Closure $next, $roleOrPermission, $guard = null
2828
throw UnauthorizedException::missingTraitHasRoles($user);
2929
}
3030

31-
$rolesOrPermissions = is_array($roleOrPermission)
32-
? $roleOrPermission
33-
: explode('|', $roleOrPermission);
31+
$rolesOrPermissions = explode('|', self::parseRoleOrPermissionToString($roleOrPermission));
3432

3533
if (! $user->canAny($rolesOrPermissions) && ! $user->hasAnyRole($rolesOrPermissions)) {
3634
throw UnauthorizedException::forRolesOrPermissions($rolesOrPermissions);
@@ -42,15 +40,36 @@ public function handle($request, Closure $next, $roleOrPermission, $guard = null
4240
/**
4341
* Specify the role or permission and guard for the middleware.
4442
*
45-
* @param array|string $roleOrPermission
43+
* @param array|string|\BackedEnum $roleOrPermission
4644
* @param string|null $guard
4745
* @return string
4846
*/
4947
public static function using($roleOrPermission, $guard = null)
5048
{
51-
$roleOrPermissionString = is_string($roleOrPermission) ? $roleOrPermission : implode('|', $roleOrPermission);
49+
$roleOrPermissionString = self::parseRoleOrPermissionToString($roleOrPermission);
5250
$args = is_null($guard) ? $roleOrPermissionString : "$roleOrPermissionString,$guard";
5351

5452
return static::class.':'.$args;
5553
}
54+
55+
/**
56+
* Convert array or string of roles/permissions to string representation.
57+
*
58+
* @return string
59+
*/
60+
protected static function parseRoleOrPermissionToString(array|string|\BackedEnum $roleOrPermission)
61+
{
62+
// Convert Enum to its value if an Enum is passed
63+
if ($roleOrPermission instanceof \BackedEnum) {
64+
$roleOrPermission = $roleOrPermission->value;
65+
}
66+
67+
if (is_array($roleOrPermission)) {
68+
$roleOrPermission = array_map(fn ($r) => $r instanceof \BackedEnum ? $r->value : $r, $roleOrPermission);
69+
70+
return implode('|', $roleOrPermission);
71+
}
72+
73+
return (string) $roleOrPermission;
74+
}
5675
}

0 commit comments

Comments
 (0)