在我的用户表格中,我添加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
。
我在类似主题中找不到答案......
答案 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
将不会返回此错误。