代码之家  ›  专栏  ›  技术社区  ›  Istiaque Ahmed

laravel entrust-添加对来宾角色的支持

  •  0
  • Istiaque Ahmed  · 技术社区  · 7 年前

    我正在使用 Entrust middleware 从这里开始。一切都很顺利,除了当我想向管理员公开某个页面时 登录 以及任何 未登录 .

    在他的帮助下 here ,我添加了下面的中间件,但是当我点击url时,它说,重定向太多了。

    namespace App\Http\Middleware;
    
    use App\Models\User;
    use App\Models\Role;
    use Closure;
    use Illuminate\Contracts\Auth\Guard;
    use Illuminate\Database\Eloquent\Collection;
    
    class CheckPermission {
    
        /**
         * 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->guest() )
            {
                $user = new User;
                $user->id = 0;
                $user->username = 'Guest';
    
                $role = Role::find(9);// EXPLANATION OF 9 IS GIVEN BELOW UNDER CODE
    
                $user->roles = new Collection;
                $user->roles->add( $role );
            }
            else
            {
                $user = $this->auth->user();
            }
    
            // Automatically check permission based on route name
            /* 
              if ( !$user->can( $request->route()->getName() ) )
             {
                // Handle denied permission, e.g. abort(401)
             }
            */
    
            return $next( $request );
        }
    
    } 
    

    数据库更改: 在里面 roles 表I添加了一行ID 9和名称 guest . 如何在“委托”中添加来宾支持,以便未登录的用户将被视为来宾,并允许他访问某些路线。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Devon Bessemer    7 年前

    我个人会避免任何处理授权的全局中间件,以免阻止您的应用程序拥有可公开访问的页面。使用路由组将中间件分配给受保护的路由。

    虽然它可能不适合Entrust的设计,但您也可以编写一个自定义中间件,只允许来宾和管理员使用。像这样的:

    class AdminOrGuestMiddleware {
    
       /**
         * 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 ($request->user() && !$request->user()->hasRole('admin')) {
                return redirect('/home');
            }
    
            return $next($request);
        }