在PHP Laravel 5中配置路由限制的最佳方法是什么?

时间:2015-06-19 17:33:58

标签: php laravel laravel-5 laravel-routing middleware

我是Laravel 5中间件的新手 - 我最近在我的应用程序中添加了一个新的user type == Dev。我需要为该用户类型设置一定的路由限制 - 根据他们能够/不能访问的内容。

所以我创建了

DevMiddleware.php

<?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);
    }
}

我在我的

中注册了它

Kernel.php

'dev' => 'App\Http\Middleware\DevMiddleware',

我在我的

中使用它

routes.php文件

$router->group(['middleware' => ['auth', 'admin', 'dev' ] ], function() {

    //Any routes goes in here

});

当我走那条路时 - 不断收到404错误。

我希望能够去那些路线。

我在这里做错了什么?我如何解决它 ?

2 个答案:

答案 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