爆炸功能在laravel中间件中不起作用

时间:2018-07-03 10:06:03

标签: php laravel

我正在开发Laravel ACL系统。我有一个用户表,一个角色表和一个权限表。当我使用中间件和内部中间件检查授予用户权限时,我使用的是explode()函数。此功能仅显示其他权限不包含的第一个权限。

这是我的控制人;

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();;
}

使用dd()函数时的结果。

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

1 个答案:

答案 0 :(得分:1)

控制器

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

中间件    使用...访问变量参数

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

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

或者您可以使用

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

中间件

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