Majeed
Majeed

Reputation: 149

explode function doesn't work in laravel middleware

I'm developing a Laravel ACL System. I have a User table, a role table and a permissions table. When I check the user given permissions using middleware and inside middleware I'm use explode() function. this function only show the first permissions other permissions doesn't contains.

Here, is my Controller;

function __construct()
{
    $this->middleware('auth');
    $this->middleware('HasPermission:Role-Read,Role-Update,Role-Delete');
}

My Middleware.

 public function handle($request, Closure $next,$permissions='')
{
    $permissions_array = explode(',', $permissions);
    dd($permissions_array);
    foreach($permissions_array as $permission){
        if(Auth::user()->hasPermission($permission)){
            return $next($request);
        }
    }

    return redirect()->back();;
}

result when i use dd() function.

array:1 [▼ 0 => "Role-Read" ]

Upvotes: 0

Views: 201

Answers (1)

Wilson Xu
Wilson Xu

Reputation: 41

Controller

$this->middleware('HasPermission:Role-Read,Role-Update,Role-Delete');

Middleware Using ... to access variable arguments

public function handle($request, Closure $next, ...$permissions)
    {
        foreach($permissions_array as $permission){
            if(Auth::user()->hasPermission($permission)){
                return $next($request);
            }
        }

        return redirect()->back();;
    }

or you can use

$this->middleware('HasPermission:Role-Read|Role-Update|Role-Delete');

Middleware

$permissions_array = explode('|', $permissions);

Upvotes: 1

Related Questions