【发布时间】:2018-10-03 08:40:41
【问题描述】:
我正在开始我的第一个 Laravel 项目(实际上是第一个 MVC / OOPHP 项目),并且可以在路由方面使用一些帮助。
我按照https://medium.com/employbl/easily-build-administrator-login-into-a-laravel-5-app-8a942e4fef37 的指南添加了在加载页面时检查用户是否为管理员的功能。它适用于普通视图路线,例如
Route::get('/admin/something', 'AdminController@admin_something')
->middleware('is_admin')
->name('admin');
但是我现在有一个资源路由,当我将两个 -> 行添加到路由时出现错误。所以这在没有身份验证的情况下有效:
Route::resource('thingies', 'ThingyController');
但是有了这个:
Route::resource('thingies', 'ThingyController')
->middleware('is_admin')
->name('admin');
我收到错误 Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_RECOVERABLE_ERROR) 函数 Illuminate\Routing\PendingResourceRegistration::name() 的参数太少,在第 24 行的 /var/www/routes/web.php 中传递了 1 个,而预期的正好是 2 个
我需要做些什么不同的事情来将此身份验证添加到资源路由?
教程中的 is_admin() 函数:
const ADMIN_TYPE = 'admin';
const DEFAULT_TYPE = 'default';
public function isAdmin() {
return $this->type === self::ADMIN_TYPE;
}
还有中间件:
namespace App\Http\Middleware;
use Closure;
class IsAdmin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if(auth()->user()->isAdmin()) {
return $next($request);
}
return redirect('home');
}
}
【问题讨论】:
标签: php laravel authentication authorization