验证当前用户是否拥有请求项目

时间:2015-09-24 17:21:30

标签: php laravel laravel-5

我很确定我想在这里使用中间件,但不知道如何。我有一个名为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');
}

1 个答案:

答案 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'));

这使你的工作更加清晰。