Laravel:Auth :: user() - > app.blade.php中的role_id显示尝试获取非对象

时间:2017-07-05 11:37:41

标签: php laravel

在我的用户表格中,我添加role_id列,其中1为admin,2为user。所以,当我想在我的 app.blade.php 文件中的标题页面中这样:

<ul class="nav navbar-nav">
   @if(Auth::user()->role_id == 1)
    <li><a href="{!! url('/admin/users'); !!}">Users</a></li>
   @endif
</ul>
出现

错误: (3/3)ErrorException 具有非复合名称的使用声明&#39; Auth&#39;没有效果(查看:C:\ xampp \ htdocs \ vendetta \ resources \ views \ layouts \ app.blade.php)(查看:C:\ xampp \ htdocs \ vendetta \ resources \ views \ layouts \ app.blade.php )

AdminUsersController中的

index()方法如下所示:

<?php

namespace App\Http\Controllers;

use App\User;
use App\Role;
use App\Http\Requests\UserCreateRequest;
use App\Http\Requests\UserUpdateRequest;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;
use Auth;


class AdminUsersController extends Controller
{

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $users = User::paginate(5);

        if(Auth::user()->role_id !== 1) {
            return redirect('/home');
        }

        return view('admin.users.index', compact('users'));
    }

当我使用check()代替user()->role_id == 1时,它可以正常运行,但是除了一个没有登录的用户外,所有用户都可以看到,但我只想看到admin

我在类似主题中找不到答案......

3 个答案:

答案 0 :(得分:1)

你使用

<ul class="nav navbar-nav">
   @if(Auth::user()->role_id == 1)
    <li><a href="{!! url('/admin/users'); !!}">Users</a></li>
   @endif
</ul>

但您不确定用户是否已登录

我的意思是说用户可能是访客而没有登录

你应该使用

@if(Auth::check() && Auth::user()->role_id == 1)

此条件检查用户已进入,然后检查用户role_id

所以用以下代码替换代码:

<ul class="nav navbar-nav">
   @if(Auth::check() && Auth::user()->role_id == 1)
    <li><a href="{!! url('/admin/users'); !!}">Users</a></li>
   @endif
</ul>

答案 1 :(得分:0)

您可以在AdminUsersController中的index()方法中添加此代码:

 public function __construct()
 {
     // user must log in to use this controller
     $this->middleware('auth');        
 }

 public function index()
 {
    $users = User::paginate(5);

    if(Auth::check()){
       $roldId = Auth::user()->role_id;
       if($roldId !== 1) {
           return redirect('/home');
       }
    }   

    return view('admin.users.index', compact('users'));
 }

它适用于我,我希望它也适合你。

答案 2 :(得分:0)

您可能会收到此错误,因为Auth::user()NULL,因为当您访问该路线时没有用户登录。

尝试将以下内容添加到控制器中,以确保只有登录的用户才能使用AdminUsers控制器。

/**
 * Create a new controller instance.
 *
 * @return void
 */
public function __construct()
{
    // user must log in to use this controller
    $this->middleware('auth');        
}

每当用户试图访问该控制器管理的其中一条路线时,他/她将被要求先登录。然后,您的Auth::user()->role_id == 1将不会返回此错误。

参考:Laravel - protecting routes