【问题标题】:explode function doesn't work in laravel middleware爆炸功能在 laravel 中间件中不起作用
【发布时间】:2018-07-03 10:06:02
【问题描述】:

我正在开发一个 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" ]

【问题讨论】:

  • 尝试使用- 符号而不是, 尝试这个$permissions_array = explode('-', $permissions);
  • 不,我已经授予了这样的权限 'HasPermission:Role-Read,Role-Update,Role-Delete' 所以,我需要这样的字符串 Role-Read

标签: php laravel


【解决方案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);

【讨论】:

    猜你喜欢
    • 2021-04-01
    • 1970-01-01
    • 2022-01-18
    • 2014-05-05
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 2012-08-30
    • 2021-06-21
    相关资源
    最近更新 更多