全网找不到答案的问题:授权策略始终报403错误,没有详细的错误输出,应该怎么排查错误呢?
在laravel里使用授权策略没什么问题。
但是我在使用了dcat(或者laravel-admin)的时候,授权策略遇到了问题。
问题描述:
永远提示 This action is unauthorized
策略方法里,直接return true。页面还是提示This action is unauthorized
就算我彻底把策略文件删除掉,页面也不报错,只提示 This action is unauthorized
我的问题是
授权策略只报403,没有具体的错误提示,请问怎么排错?
策略文件被删除掉,页面还是提示This action is unauthorized。也就是说,策略方法根本没有走我写的策略文件。那么怎么才能知道他走的是哪里呢?怎么排错呢?
问题出现的场景:
控制器文件中使用授权策略的代码:
//app\Admin\Controllers\CustomerController.php
$this->authorize('update', [Admin::user(), $form->model()->id]);
模型文件:
app\Models\Customer.php
授权策略文件
app\Policies\CustomerPolicy.php
//事实上,这个文件自始至终感觉都没有生效,里面代码不管怎么改,哪怕直接返回true,哪怕直接删除这个文件,也没任何影响
<?php
namespace App\Policies;
use Dcat\Admin\Models\Administrator;
use App\models\Customer;
use Illuminate\Auth\Access\Response;
use Illuminate\Auth\Access\HandlesAuthorization;
class CustomerPolicy
{
use HandlesAuthorization;
/**
* Create a new policy instance.
*
* @return void
*/
public function __construct()
{
//
}
public function update(Administrator $currentUser, Customer $Customer)
{
// return $currentUser->id === $Customer->admin_users_id
// ? Response::allow()
// : Response::deny('You do not own this post.');
return true;
}
}
授权策略的注册:
public function boot()
{
$this->registerPolicies();
// 修改策略自动发现的逻辑
Gate::guessPolicyNamesUsing(function ($modelClass) {
// 动态返回模型对应的策略名称,如:// 'App\Models\User' => 'App\Policies\UserPolicy',
return 'App\Policies\\'.class_basename($modelClass).'Policy';
});
}
乌鸦嘴社区 wyz.xyz 来玩。
你跟踪下,,,代码走到哪里去了,,,
所以跟授权策略有啥关系
可以放出控制器代码看看
Administrator 模型是否有继承 Illuminate\Foundation\Auth\User

类似
你可以參考這裡的最後一個回覆 问答:Laravel-admin 中 能不能使用 授权策略 policy 呢?
使用这个可以自定义传参,否则authorize默认的第一个始终是系统自带的auth
看下trace信息执行到哪里中断了