@@ -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