全网找不到答案的问题:授权策略始终报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 来玩。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 6

你跟踪下,,,代码走到哪里去了,,,

4年前 评论
shebaoting (楼主) 4年前

策略文件被删除掉,页面还是提示This action is unauthorized。

所以跟授权策略有啥关系

可以放出控制器代码看看

4年前 评论

Administrator 模型是否有继承 Illuminate\Foundation\Auth\User
类似

4年前 评论
shebaoting (楼主) 4年前
siiiyaa (作者) 4年前
siiiyaa (作者) 4年前
shebaoting (楼主) 4年前
4年前 评论
shebaoting (楼主) 4年前
lykang (作者) 4年前
shebaoting (楼主) 4年前
ShiKi
   $this->authorizeForUser($user,'update',$channel);

使用这个可以自定义传参,否则authorize默认的第一个始终是系统自带的auth

4年前 评论
shebaoting (楼主) 4年前

看下trace信息执行到哪里中断了

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!