我很确定我想在这里使用中间件,但不知道如何。我有一个名为AssetController
的控制器。
用户将文件上传到自己的项目。我在控制器中有功能,可以创建新资产,编辑现有资产和删除资产。现在,在每个相应的函数中,我使用此代码检查请求用户是否实际拥有该项目(我将project_id
传递给每个请求):
<?php
public function destroy($id)
{
$project = Projects::find(Input::get('pid'));
//-- if $project exists and the user_id row is equal to the authenticated user id, let them proceeed
if ($project && $project->user_id == Auth::user()->id)
{
//-- user owns the project so continue to delete asset with id of $id
}
//-- else, invalid project id because this user does not own it
}
因此,在继续使用我想要调用的实际函数之前,如何使用中间件(如果这甚至是我应该使用的)来进行此检查,而不是在每个函数中使用块。
现在我的__construct()
功能只有这个:
public function __construct()
{
$this->middleware('auth');
}
答案 0 :(得分:1)
您可以将其包含在查询中,而不是中间件或if
条件:
$project = Projects::where('user_id ', auth()->id())->findOrFail(Input::get('pid'));
如果找不到模型,findOrFail
方法将自动返回404。
如果您经常使用此功能,可以将其添加为query scope:
class Projects extends Model
{
public function scopeOwnedBy($query, $user)
{
$query->where('user_id', $user->id);
}
}
然后您可以轻松地在控制器中使用它:
$project = Projects::ownedBy(auth()->user())->findOrFail(Input::get('pid'));
这使你的工作更加清晰。