Php 如何在Laravel 5.3中执行授权策略?

Php 如何在Laravel 5.3中执行授权策略?,php,laravel,authorization,laravel-5.3,policies,Php,Laravel,Authorization,Laravel 5.3,Policies,我在这里读到: 我试着喜欢这个 我的优惠政策是这样的: <?php namespace App\Policies; use App\User; use App\Models\Favorite; use Illuminate\Auth\Access\HandlesAuthorization; class FavoritePolicy { use HandlesAuthorization; public function view(User $user, Favorite $f

我在这里读到:

我试着喜欢这个

我的优惠政策是这样的:

<?php
namespace App\Policies;
use App\User;
use App\Models\Favorite;
use Illuminate\Auth\Access\HandlesAuthorization;
class FavoritePolicy
{
    use HandlesAuthorization;
    public function view(User $user, Favorite $favorite)
    {
        return $user->id === $favorite->user_id;
    }
}
<?php
use App\Models\Favorite;
...
class FavoriteController extends ApiController
{
    ...
    public function index(Favorite $favorite)
    {
        $this->authorize('view', $favorite);
        return view('profile.favorite');
    }
}
<?php
namespace App\Providers;
use App\Models\Favorite;
use App\Policies\FavoritePolicy;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
class AuthServiceProvider extends ServiceProvider
{
    protected $policies = [
        'App\Model' => 'App\Policies\ModelPolicy',
        Favorite::class => FavoritePolicy::class,
    ];
    public function boot()
    {
        $this->registerPolicies();
    }
}

感谢您在更新中提供更多信息

因此,您想显示一个特定收藏夹实体的详细信息页面,但前提是该用户是该实体的所有者

首先是一个小问题:通常在Laravel中,显示特定实体细节的控制器方法称为show,而不是index。index是在示例中显示实体列表的方法的名称:收藏夹列表

关于你的问题: 您的策略检查当前登录的用户是否可以查看空的$favorite,并在更新后查看dd$favorite输出。这意味着,$favorite也没有在索引方法中设置

我猜,您有一个类似于此的路线定义:

Route::get('favorite/{id}', 'FavoriteController@index');
这意味着,id的值作为一个参数注入到索引方法中,但不是一个常用的实体。查询收藏夹实体是您需要在方法中执行的操作

因此,您的方法应该更像这样:

public function index($favoriteId)
{
    $favorite = Favorite::findOrFail($favoriteId);
    $this->authorize('view', $favorite);
    return view('profile.favorite')->with('favorite', $favorite);
}

希望有帮助!如果没有,请添加评论 DD$最喜欢的输出是什么?考虑将DD的输出添加到你的问题中,这在你的评论中是很难理解的。顺便说一下,这是一个笨拙的方式。应该有一种方法我们不需要调用控制器。
public function index($favoriteId)
{
    $favorite = Favorite::findOrFail($favoriteId);
    $this->authorize('view', $favorite);
    return view('profile.favorite')->with('favorite', $favorite);
}