使用Laravel 5.5.14中的策略

时间:2017-10-23 07:02:39

标签: api authorization laravel-5.5 policies

我是使用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();
    }
}

TopicController.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中使用政策吗?

1 个答案:

答案 0 :(得分:0)

在AuthServiceProvider类中,您必须在策略aray中注册策略。 Laravel文档是start

的好地方
protected $policies = [
  \App\Topic::class => \App\Policies\Topicpolicy::class 
]

其次从您的应用中获取个人令牌,以便您可以使用它来拨打您的API。您使用护照和护照附带随时可以使用Vue组件来帮助您启动。如果您想在同一个应用程序中使用api,请检查here

我不确定您尝试使用策略中的HandlesAuthorization特征进行帮助。由于这个原因,Laravel有一个middleware供我们使用。