laravel无法运行php,php-无法在Laravel 5.3中运行策略

我一直在关注Laravel授权文档,试图通过使用策略来构建“是否允许用户这样做”功能,但我无法使其正常工作.我不断收到此操作是未经授权的,我也尝试过使用路由中间件.

PagePolicy.php:

namespace App\Policies;

use App\Models\User;

use App\Models\Page;

use Illuminate\Auth\Access\HandlesAuthorization;

class PagePolicy

{

use HandlesAuthorization;

/**

* Determine whether the user can view the page.

*

* @param App\Models\User $user

* @param App\Models\Page $page

* @return mixed

*/

public function view(User $user, Page $page)

{

return $user->id === $page->user_id;

}

/**

* Determine whether the user can create pages.

*

* @param App\Models\User $user

* @return mixed

*/

public function create(User $user)

{

}

/**

* Determine whether the user can update the page.

*

* @param App\Models\User $user

* @param App\Models\Page $page

* @return mixed

*/

public function update(User $user, Page $page)

{

//

}

/**

* Determine whether the user can delete the page.

*

* @param App\Models\User $user

* @param App\Models\Page $page

* @return mixed

*/

public function delete(User $user, Page $page)

{

//

}

}

PageController.php:

namespace App\Http\Controllers;

use Auth;

use Carbon\Carbon;

use App\Models\Page;

use App\Http\Requests\PageRequest;

class PageController extends ApiController

{

public function createNewPage(PageRequest $request)

{

$this->authorize('create', Page::class);

$request->merge([

'user_id' => Auth::id(),

'published_at' => Carbon::now(),

]);

if (Page::create($request->all())) {

return response()->json('success', 201);

}

return response()->json('error', 500);

}

}

AuthServiceProvidor.php:

namespace App\Providers;

use App\Models\Page;

use App\Policies\PagePolicy;

use Illuminate\Support\Facades\Gate;

use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider

{

/**

* The policy mappings for the application.

*

* @var array

*/

protected $policies = [

Page::class => PagePolicy::class,

];

/**

* Register any authentication / authorization services.

*

* @return void

*/

public function boot()

{

$this->registerPolicies();

//

}

}

解决方法:

我设法弄清楚了.我没有使用路由模型绑定.因此,我在页面调用之后添加了authorize(),并使用$page变量而不是Page :: class.

public function update(PageUpdateRequest $request, $pageSlug)

{

$page = Page::where(['user_id' => Auth::id(), 'slug' => $pageSlug])->first();

$this->authorize('update', $page);

$page->update($request->all());

return fractal()->item($page, new PageTransformer())->toArray();

}

标签:policy,laravel,laravel-5,authorization,php

来源: https://codeday.me/bug/20191118/2026261.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值