在Laravel 5.1项目中,我有:
属于用户的页面和页面的视频。 我想确保用户不能拥有他们所拥有的视频和网页。管理员用户可以查看所有页面和视频。
如何解决这个问题?
我已经在使用中间件并将用户ID作为参数传递,但我不知道如何在Video Constructor中获取用户ID。 我可能需要像Constructor Injection这样的东西,但文档并不是很清楚。
编辑: 根据@tommy的建议,我使用了Laravel授权来检查用户是否拥有权限。 我决定使用单个存储库,因为检查总是相同的(与用户匹配的页面)
在\ App \ Providers \ AuthServiceProvider
中public function boot(GateContract $gate)
{
$this->registerPolicies($gate);
$gate->define('check-owner', function ($user, $page) {
return $user->id === $page->user_id;
});
}
在App \ Repositories \ OwnerRepository
中namespace App\Repositories
use App\Page;
use Gate;
class OwnerRepository
{
public function CheckifOwns(Page $page){
if (Gate::denies('check-owner', $page))
{
abort(403, 'Unauthorized action.');
}
}
}
在视频控制器中
use App\Repositories\OwnerRepository;
private $repository;
public function __construct(OwnerRepository $repository)
{
$this->repository = $repository;
$this->middleware('auth');
}
public function show($id)
{
$video= Video::findOrFail($id);
$this->repository->CheckifOwns($video->Page);
return view('videos.view',compact('video'));
}