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);
}