Laravel (7) Политики ресурсов не работают с CamelCase, получите 403 для политики просмотра (показать в контроллере)

Вот два примера, первый для ResourceController (возврат 200 - нормально), второй для ResourceLogsController (возвращает 403 - не авторизован)

api.php

// RESOURCES
Route::apiResource('resources','Api\ResourceController');

// RESOURCELOGS
Route::apiResource('resourcelogs','Api\ResourceLogController');

AuthServiceProvider:

use App\Policies\ResourcePolicy;
use App\Policies\ResourceLogPolicy;

// ...

    protected $policies = [
        Resource::class => ResourcePolicy::class,
        ResourceLog::class => ResourceLogPolicy::class
    ];

ResourceController:

    public function __construct()
    {
      $this->middleware('auth:api');
      $this->authorizeResource(Resource::class, 'resource');
    }

    public function index(Resource $resource)
    {
      dd('authorization ok');
    }

    public function show(Resource $resource)
    {
      dd('authorization ok');
    }

ResourceLogController:

    public function __construct()
    {
      $this->middleware('auth:api');
      $this->authorizeResource(ResourceLog::class, 'resourcelog');
    }

    public function index(ResourceLog $resourceLog)
    {
      dd('authorization ok');
    }

    public function show(ResourceLog $resourceLog)
    {
      dd('no authorization here');
    }

ResourcePolicies: просто возвращает простую истину в качестве теста

class ResourcePolicy
{
    use HandlesAuthorization;

    public function viewAny(User $user)
    {
        return true;
    }

    public function view(User $user, Resource $resource)
    {
        return true;
    }

ResourceLogPolicies: просто возвращает простую истину в качестве теста


class ResourceLogPolicy
{
    use HandlesAuthorization;

    public function viewAny(User $user)
    {
        return true;
    }

    public function view(User $user, ResourceLog $resourceLog)
    {
        return true;
    }

Я попытался изменить второй параметр в $ this- ›authorizeLogResource для нижнего регистра, chamelcase и т. Д.

$ this- ›authorizeResource (ResourceLog :: class, 'resourcelog'); $ this- ›authorizeResource (ResourceLog :: class, 'App \ ResourceLog'); // = Слишком мало аргументов для функции App \ Policies \ ResourceLogPolicy :: view (), 1 передан

Я вижу ресурс, а не журнал ресурсов в промежуточном программном обеспечении ...

введите описание изображения здесь


person user14409370    schedule 12.10.2020    source источник
comment
Я предполагаю, что это ошибка, я изменил существующий контроллер рабочих ресурсов с RuleController на AccessRightController, включая зависимости, и появился тот же 403   -  person user14409370    schedule 12.10.2020


Ответы (1)


Ответьте с помощью самого тейлоротвелла:

В роутере:

Route::apiResource('resourceLogs','Api\ResourceLogController');

Контроллер:

public function __construct()
{
  $this->middleware('auth:api');
  $this->authorizeResource(ResourceLog::class, 'resourceLog'); 
}

Метод:

public function show(ResourceLog $resourceLog)
{
return new ResourceLogResource($resourceLog);
}

«resourceLogs» в Route и authorizeResource + $ resourceLog (!) должны иметь одинаковый регистр.

person user14409370    schedule 13.10.2020