【发布时间】:2020-02-07 14:35:12
【问题描述】:
这是我的PostCategoriesController 课程的一部分:
<?php
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\PostCategory;
use Illuminate\Support\Facades\Auth;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Auth\Access\AccessDeniedHttpException;
class PostCategoriesController extends Controller
{
public function __construct()
{
try {
echo 'The try works.';
$this->authorizeResource(PostCategoriesController::class);
} catch (\Exception $err) {
// Never get here.
dd('The catch does not. We never see this...');
}
}
public function create()
{
// This works... but then I have to repeat it for every action...
try {
$this->authorize('create');
return view('admin.post-categories.create');
} catch (\Exception $err) {
//return redirect()->route('admin.welcome');
return 'You cannot create categories, sorry.';
}
}
}
问题出在方法authorizeResource(),它抛出了异常:
Symfony\Component\HttpKernel\Exception\ AccessDeniedHttpException 此操作未经授权。
方法authorizeResource() 不在文档中,但我在其他一些帖子中看到它推荐,例如Laravel policy always false 和Apply Policy to Resource Controller。也是here。
PostCategoryPolicy 类只是从他的方法返回布尔值,例如:
public function update(User $user, PostCategory $postCategory)
{
return $user->has_role === 1;
}
那么,为什么我不能捕捉到那个异常呢?
【问题讨论】:
标签: laravel authorization