Laravel 策略始终拒绝访问

Laravel policy always denies access

我注册了保单

protected $policies = [
         'App\Grade' => 'App\Policies\GradesPolicy'

    ];

这是我获取此资源的路线:

Route::get('/grades', 'GradesController@showGrades');

控制器方法

public function showGrades()
    {

        $this->authorize('viewAny');

        switch(Auth::user()->role)
        {
            case 'teacher':
               return view('teacher');
            break;

            case 'parent':
              return view('parent');
            break;

            default:
             abort(400);
            break;
        }
    }

及政策方法

public function viewAny(User $user)
    {

         return $user->check();
    }

是的,我知道这里有相关主题。我读过它们。我知道这与模型绑定有关。永远不会调用 viewAny 方法。我在其中使用了 dd,但它什么也没显示。但是我应该如何在这里绑定模型呢?有什么想法吗?

你在调用action时没有指定相关模型给authorize方法"viewAny",所以你需要做的是:

$this->authorize('viewAny',Grade::class);

或者直接将其添加到中间件并从您的控制器中删除授​​权调用

Route::get('/grades','GradesController@showGrades')
->middleware('can:viewAny,App\Grade');