Laravel Middleware访问受保护的值

时间:2016-02-05 22:56:42

标签: laravel controller middleware

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

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

我收到了$ 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(),我可以看到所有属性但有保护。 我需要改变什么才能使其发挥作用?

1 个答案:

答案 0 :(得分:1)

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

$request->user()->email;

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

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