0

我是在 Laravel 中使用策略的新手。我正在使用 Laravel 学习 API 开发。我的代码如下所示。

TopicPolicy.php

<?php
namespace App\Policies;

use App\User;
use App\Topic;
use Illuminate\Auth\Access\HandlesAuthorization;

class Topicpolicy
{
    use HandlesAuthorization;

    public function update(User $user, Topic $topic)
    {
        return $user->ownsTopic($topic);
    }

    public function destroy(User $user, Topic $topic)
    {
        return $user->ownsTopic($topic);
    }
}

AuthServiceProvider.php

<?php

namespace App\Providers;

use Laravel\Passport\Passport;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider
{
    protected $policies = [
        'App\Model' => 'App\Policies\ModelPolicy',
    ];

    public function boot()
    {
        $this->registerPolicies();

        Passport::routes();
    }
}

主题控制器.php

<?php

namespace App\Http\Controllers;

use App\Topic;
use App\Post;
use Illuminate\Http\Request;
use App\Http\Requests\StoreTopicRequest;
use App\Transformers\TopicTransformer;
use League\Fractal\Pagination\IlluminatePaginatorAdapter;

class TopicController extends Controller
{
    public function destroy(Topic $topic) {
        $this->authorize('destroy',$topic);
        $topic->delete();
        return response(null,204);
    }
}

我收到错误This action is unauthorized.。我不知道如何使用策略。谁能指导我在 Laravel 5.5.14 中使用策略?

4

1 回答 1

0

在 AuthServiceProvider 类中,您必须在策略数组中注册策略。Laravel 文档是一个很好的起点

protected $policies = [
  \App\Topic::class => \App\Policies\Topicpolicy::class 
]

其次,从您的应用程序中获取个人令牌,以便您可以使用它来调用您的 api。您使用护照,护照附带准备使用的 Vue 组件来帮助您开始。如果您想在同一个应用程序中使用 api,请查看此处

我不确定您试图与策略中的 HandlesAuthorization 特征共谋什么。为此, Laravel 有一个中间件供我们使用。

于 2017-11-07T05:15:14.703 回答