我是Laravel 5中间件的新手 - 我最近在我的应用程序中添加了一个新的user type
== Dev
。我需要为该用户类型设置一定的路由限制 - 根据他们能够/不能访问的内容。
所以我创建了
<?php
namespace App\Http\Middleware;
use App\Article;
use Closure, View ;
use Illuminate\Contracts\Auth\Guard;
class DevMiddleware
{
/**
* The Guard implementation.
*
* @var Guard
*/
protected $auth;
/**
* Create a new filter instance.
*
* @param Guard $auth
* @return void
*/
public function __construct(Guard $auth)
{
$this->auth = $auth;
}
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($this->auth->getUser()->type !== "Dev") {
return View::make('errors.404');
}
return $next($request);
}
}
我在我的
中注册了它 'dev' => 'App\Http\Middleware\DevMiddleware',
我在我的
中使用它$router->group(['middleware' => ['auth', 'admin', 'dev' ] ], function() {
//Any routes goes in here
});
当我走那条路时 - 不断收到404错误。
我希望能够去那些路线。
我在这里做错了什么?我如何解决它 ?
答案 0 :(得分:1)
你有3个中间件在那里,但你假设DEV一个失败了。粘贴其他的内容2.此外,您正在使用:
$this->auth->getUser()->type
那是做什么的?如果用户是管理员,则可能在DEV中间件(或其他方式)失败。
P.S:如果您需要处理角色,我建议您使用Entrust Package。
答案 1 :(得分:0)
您是否对其他中间件使用相同的逻辑?如果是这样,则逻辑将像OR语句一样,如果'auth'失败,或者'admin'失败,或者'dev'失败,那么404。
我不确定处理你想要的“最佳”方式,但我有一个来自开源项目的例子; laravel-5-boilerplate:
Ignoring controlTimebase set by client because AVSampleBufferDisplayLayer was added to a synchronizer