Laravel 5.3保护路线从用户具有不同的角色



问题

我正在寻找一种保护用户免受不属于他们的访问路线的方法,示例管理员无法访问用户区域,简单用户无法访问管理员区域

嗨,我有一个Laravel 5.3应用程序,它有两种类型的用户

  1. 管理员
  2. 简单的用户

我正在尝试防止admin访问simple user路线,反之亦然,我经常搜索并找到了创建中间件的一种解决方案

我做了什么

<?php
namespace AppHttpMiddleware;
use Auth;
use Closure;
class UserRole
{
    /**
     * Handle an incoming request.
     *
     * @param  IlluminateHttpRequest  $request
     * @param  Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if ( Auth::check()) // user logged
        {
            $request_url = $request->getRequestUri();
            if( Auth::user()->user_type == 1 ) // simple user
            {
                // checking if simple user is visiting routes              // starts with /user in the url 
                if (strpos($request_url, "/user") === 0)
                {
                    return $next($request);
                }
                else
                {
                    return redirect('/');
                }
            }
            // checking if admin is visiting routes                    // starts with /admin in the url
            else if( Auth::user()->user_type == 2 ) // admin
            {
                if (strpos($request_url, "/admin") === 0)
                {
                    return $next($request);
                }
                else
                {
                    return redirect('/');
                }
            }
            else
            {
                return redirect('/');
            }
        }
        return redirect('/');
    }
}

不幸的是,两者都能够访问彼此的限制区域。我找不到更好的方法来保护用户免于访问他们也无法访问的路线。

如果您想使用中间件来完成 -

  1. 创建两个中间件,一个用于管理员,一个用于简单的用户。

  2. 然后在路由文件中创建两个路由组,即routes/web.php

  3. 使用 admin 中间件保护一个路线组,并将所有相关路由放在该组中。保护另一个路线组 和 简单 - 用户中间件,并将所有相关路线放在该组中。

Route::group(['middleware' => ['auth', 'admin']], function() {
    // put all your admin routes here
});
Route::group(['middleware' => ['auth', 'simple-user']], function() {
    // put all your simple user routes here
});

您还可以使用角色和许可来实现这一目标。这是一个可以满足您需求的软件包。

https://packagist.org/packages/zizaco/entrust

最新更新