再看了“使用第三方Package: Roles”视频后,参照github上的包得说明尝试使用了,但发现一个关于异常处理的问题。
问题具体描述如下:
官方文档中说到使用其自带的中间件可以进行权限控制,当没有权限时会抛出\Bican\Roles\Exceptions\RoleDeniedException
, \Bican\Roles\Exceptions\PermissionDeniedException
或者\Bican\Roles\Exceptions\LevelDeniedException
异常,只需在app/Exceptions/Handler.php
进行相关定义异常处理代码。
routes.php:
use Illuminate\Support\Facades\Auth;
Route::get('/', function () {
Auth::logout();
Auth::loginUsingId(2);
return Auth::user()->id;
});
Route::get('/user', [
'middleware' => 'role:delete.users',
'uses' => 'UserController@index'
]);<br></br>
handler.php
public function render($request, Exception $e) {
if ($e instanceof ModelNotFoundException) {
$e = new NotFoundHttpException($e->getMessage(), $e);
}
if ($e instanceof \Bican\Roles\Exceptions\RoleDeniedException) {
return redirect()->back();
}
if ($e instanceof \Bican\Roles\Exceptions\PermissionDeniedException) {
return redirect()->back();
}
if ($e instanceof \Bican\Roles\Exceptions\LevelDeniedException) {
return redirect()->back();
}
return parent::render($request, $e);
}<br></br>
当拥有权限时可以正产访问UserController@index
当没有权限时直接报出500错误,并没有和预想中的back()
;为了找出原因我尝试在handler.php
文件中echo
一些信息,发现render()并没有执行。