Laravel 中间件访问受保护的值

Laravel Middleware access protected values

我写了自己的用户角色系统,但我不知道如何在我的中间件路由中实现验证。

中间件 class 正在调用每个请求。

我收到 $request->user() 但我无法访问属性来验证用户是否具有正确的权限。

我的中间件控制器是这样的:

namespace App\Http\Middleware;

use Closure;
use Activation;
use Cartalyst\Sentinel\Laravel\Facades\Sentinel;

class AccountMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $user = Sentinel::findByCredentials([
            'login' => $request->user()->attributes['email']
        );
        ...
        return $next($request);
    }
}

没用。

如果我尝试转储 $request->user() 我可以看到所有属性,但有一些是受保护的。 我需要更改什么才能使其正常工作?

访问 Eloquent 模型属性是通过访问器完成的,在本例中是通过 __get magic method。所以你不需要通过 $attributes 属性 数组访问它们,你只需要这样:

$request->user()->email;

以上将 return 用户电子邮件,因为 Illuminate\Database\Eloquent\Model::__get 方法已经自动获取指定的属性。


如果愿意,您甚至可以定义自己的 Accessors or Mutators 以在读取或写入数据库时​​修改属性值。