dongweng6241 2018-07-07 16:51
浏览 104

如何将字符串或数组发送到laravel中间件

I'm working on Laravel and try to make anACL system. I have a Role Middleware From myController I've sent Role to my RoleMiddleware two way.

first one is send string.

$this->middleware('HasRole:User|Admin|Author');

this way i'm get a string when use dd() function.

and the second way is.

$this->middleware('HasRole:User,Admin,Author');

this way i'm get an array when use dd() function. but this array only contains a single value.

result like this.

array:1 [▼ 0 => "User" ]

other two value Admin & Author doesn't appear in this array.

How can i work both way string & array

Here is my middleware.

public function handle($request, Closure $next,$role='')
{


    $roles=is_array($role)? $role: explode('|', $role);
   dd($roles);

    if($request->user()===null)
    {
        return response('Insufficient Access',401);
    }

    if($request->user()->hasAnyRole($roles) || !$roles)
    {
         return $next($request);
    }
      return response('Insufficient Permission',401);
    //return $next($request);
}
  • 写回答

3条回答 默认 最新

  • dongre6270 2018-07-07 17:35
    关注

    I know maybe not exactly the answer to your question, but I recommend you to use laravel authorization instead middleware. see this doc

    I prefer to use this code for your problem in the controller:

    $this->authorize('update', $post);
    

    or:

    if ($user->can('create', Post::class)) {
        // Executes the "create" method on the relevant policy...
    }
    

    then inside the policy file, you should specify the statement like:

    if ($user->isSuperAdmin() || $user->id === $post->user_id) {
        return true;
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大