【发布时间】:2019-11-14 22:27:04
【问题描述】:
我在 helpers.php 中有一个函数,我在任何刀片中使用它来检查管理员是否有权查看某些按钮,它也适用于控制器,但它不适用于路由,路由忽略它。
function can($permission)
{
$userCheck = auth()->guard('admin')->check();
$user = '';
if ($userCheck === false) {
return redirect('admin/login');
} else {
$user = auth()->guard('admin')->user();
}
if ($user->id === 1) {
return true;
}
$minutes = 5;
$permissions = Cache::remember('permissions_'.$user->id, $minutes, function () use ($user) {
return explode(',', $user->permission->permission);
});
$permissions = array_flatten($permissions);
return in_array($permission, $permissions);
}
我在刀片/视图中这样使用它。
@if(can('admins'))
<a href="{{ url(getLocal().'/admin/admins') }}" class="nav-link nav-toggle">
@endif
但是,路由忽略该功能并打开所有路由。我在如下路线中使用该功能。有什么想法吗?
if (can('admins')) {
Route::get('home', 'Admin\AdminController@index')->name('admin.home');
Route::get('/admins/{id}/edit', 'Admin\AdminController@edit')->name('admins.edit');
}
【问题讨论】:
-
路由是在发送请求之前定义的(在启动会话和身份验证的中间件之前)......而且根本没有理由有条件路由
标签: php laravel laravel-5 laravel-6