限制访问|根据用户角色更改模板或重定向

时间:2017-09-11 19:05:23

标签: laravel acl

我在laravel应用程序上有AdminLTE,当管理员用户通过AdminLte登录屏幕登录时,他登录管理面板并访问其页面。没关系,当他打开前端网站时,管理员名称显示在标题上(如下图所示),因为他之前通过管理员登录屏幕登录。

enter image description here

我想要的是他不能登录前台网页。 (以下内容应显示在标题上,如下图所示)。

enter image description here

他需要在前台单独登录。解决方案是什么。

3 个答案:

答案 0 :(得分:1)

好的,所以你必须在app.blade.php上创建if和else,从中生成菜单。

 @if (!Auth::guest())
    @include('admin.includes.normal_header')
 @endif

答案 1 :(得分:0)

您需要制作两个中间件,一个是管理中间件,另一个是普通登录用户。 在普通的中间件中,您可以检查用户是否以管理员身份登录。如果以管理员身份登录,则登出他。

答案 2 :(得分:0)

有几种方法可以解决这个问题:

  1. 您可以使用不同的警卫和中间件(使用单独的表用于管理员和用户)
  2. 您可以使用基于角色的权限(如果您对两种类型的用户使用用户表)
  3. 步骤-1:创建角色表(cols:id,role)和Role.php模型
    步骤2:在用户表中添加名为'role_id'的列 第3步:在User.php模型上为角色和用户建立关系            用户属于角色

    //假设您有两个角色:1->Admin2->User

    public function role(){
         return $this->belongsTo(Role::class);
    }
    

    步骤3:在导航中,使用if else条件

         @if (!Auth::guest())
              @if(auth()->user()->role()->id == 1)
                  @include('admin.admin_header_nav')
              @else
                  @include('user.normal_header_nav')
              @endif        
         @endif
    
    
        // you can just use those condition on a link, or create a middleware     
        //called admin to wrap up the condition( auth()->user()->role()->id == 1 ),    
       // leaving it up to you