中间件和用户 - laravel 5

时间:2016-05-02 15:59:46

标签: laravel authentication middleware

如何为用户分配中间件?我只是按照laravel 5.2的指南,但我无法想象...... 我能够创建中间件(我有管理中间件)

<?php

namespace App\Http\Middleware;

use Closure;

class Admin
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return $next($request);
    }
}

我可以将中间件分配给路由

Route::group(['middleware' => ['auth', 'admin']], function () {
    Route::resource('admin/tasks', 'Admin\\TasksController');
});

但我如何检查用户是否是管理员?我只是按照laravel 5.2上的文档进行身份验证,但我不知道如何仅为“admin”中间件访问该页面...

3 个答案:

答案 0 :(得分:2)

问题1 如何检查用户是否为管理员

我认为使用session是一个很好的解决方案。您可以将用户状态存储在会话中。在Admin中间件中,您可以if (session('statut') === 'admin')检查用户是否为管理员。

问题2 用户页面访问

  • 如果用户是管理员,我们将通过return $next($request);
  • 传递请求
  • 如果用户不是管理员,我们将重定向到索引页面或其他页面 你希望return new RedirectResponse(url('/'));

以下代码可能会对您有所帮助。

    <?php namespace App\Http\Middleware;

    use Closure;
    use Illuminate\Http\RedirectResponse;

    class Admin {

    public function handle($request, Closure $next)
    {

        if (session('statut') === 'admin')
        {
            return $next($request);
        }
        return new RedirectResponse(url('/'));
    }

    }

答案 1 :(得分:1)

我有一个小例子,非常简单

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Contracts\Auth\Factory as Auth;

class Authenticate
{
    /**
     * The authentication guard factory instance.
     *
     * @var \Illuminate\Contracts\Auth\Factory
     */
    protected $auth;

    /**
     * Create a new middleware instance.
     *
     * @param  \Illuminate\Contracts\Auth\Factory  $auth
     * @return void
     */
    public function __construct(Auth $auth)
    {
        $this->auth = $auth;
    }

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string|null  $guard
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = null)
    {
        if ($this->auth->guard($guard)->guest()) {
            return response('Unauthorized.', 401);
        }

        return $next($request);
    }
}

如果您只有访客和管理员(在您的系统中经过身份验证),您应该像上面那样做。但是,如果您有其他角色,则必须附加ACL(对于前https://github.com/Zizaco/entrust

答案 2 :(得分:1)

我建议您使用ENTRUST Laravel package

  

Entrust是一种添加基于角色的权限的简洁灵活的方法   到Laravel 5。

相关问题