请问如何实现 仅限管理员访问后台?
我希望只有管理员能访问用户列表,并删除用户,所以我建了一个后台管理界面 (Admin Panel),把用户列表入口转移进去了,并在主页下方放了一个按钮来进入该管理界面,然后建了一个中间件(CheckAdmin)来检查用户是否有管理员权限,并分配给后台管理界面的路由,结果访问后台报错:
Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_ERROR)
Function name must be a string
看了半天各种文档彻底晕了,不知道该怎么办了,而且我不知道这个用路由+中间件的思路是否正确,或者该用userpolicy吗?求大神帮我看看...不胜感激。下面是我的代码:
主页:home.blade.php
(后台管理界面按钮倒是没问题,只有管理员可见,普通用户不可见)
......
<div class="buttons_wrap">
<hr/>
@can('show_admin', Auth::user())
<a class="btn btn-lg btn-success main_button" href="{{ route('admin') }}" role="button"><font color=red><b>Admin Panel</b></font></a>
@endcan
</div>
......
中间件:CheckAdmin.php
<?php
namespace App\Http\Middleware;
use Closure;
class CheckAdmin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function CheckAdmin($request, Closure $next)
{
if ($request->is_admin=1){
return view('users.admin');
}else{
return redirect('/');
session()->flash('info', 'Sorry, only admins can access!');
}
return $next($request);
}
}
路由:
......
Route::resource('users', 'UsersController');
Route::get('admin', 'UsersController@admin')->middleware('CheckAdmin')->name('admin');
UsersController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Models\User;
class UsersController extends Controller
{
.......
public function admin(User $user)
{
return view('users.admin'); //后台管理界面名为admin.balde.php
}
}
报错信息提示你的行为是没有权限的。这种错误是可打断点来精确到哪一句代码出的错。
代码中逻辑存在错误:
