Dan*_*iel 10 laravel laravel-5.3
我正在尝试检查用户是否拥有某个型号的权限.到目前为止(使用Laravel 5.2),我在构造函数中添加了以下代码:
public function __construct()
{
if (!Auth::user()->hasPermission('usergroups')) {
abort(404);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,在升级到Laravel 5.3之后,从控制器的构造函数调用时Auth::user()返回null.如果我在类的任何其他方法中调用它,它将返回当前登录的用户.
任何想法为什么?
Sam*_*nch 25
看到这里:
构造函数中的会话
在以前版本的Laravel中,您可以在控制器的构造函数中访问会话变量或经过身份验证的用户.这从未打算成为框架的明确特征.在Laravel 5.3中,您无法访问控制器构造函数中的会话或经过身份验证的用户,因为中间件尚未运行.
作为替代方案,您可以直接在控制器的构造函数中定义基于Closure的中间件.在使用此功能之前,请确保您的应用程序正在运行Laravel 5.3.4或更高版本:
Run Code Online (Sandbox Code Playgroud)<?php namespace App\Http\Controllers; use App\User; use Illuminate\Support\Facades\Auth; use App\Http\Controllers\Controller; class ProjectController extends Controller { /** * All of the current user's projects. */ protected $projects; /** * Create a new controller instance. * * @return void */ public function __construct() { $this->middleware(function ($request, $next) { $this->projects = Auth::user()->projects; return $next($request); }); } }当然,您也可以通过在控制器操作上键入Illuminate\Http\Request类来访问请求会话数据或经过身份验证的用户:
Run Code Online (Sandbox Code Playgroud)/** * Show all of the projects for the current user. * * @param \Illuminate\Http\Request $request * @return Response */ public function index(Request $request) { $projects = $request->user()->projects; $value = $request->session()->get('key'); // }
class StudentController extends Controller
{
public $role;
public function __construct()
{
$this->middleware(function ($request, $next) {
if (!Auth::user()->hasPermission('usergroups')) {
abort(404);
}
return $next($request);
});
}
}
Run Code Online (Sandbox Code Playgroud)
希望对你有帮助!!!
更新:获取您的代码
$this->middleware(function ($request, $next) {
//your code
return $next($request);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6261 次 |
| 最近记录: |