0

可以说 auser属于 acompany并且每个company都有很多projects。现在我想为projects. 为此,我想与https://laravel.com/docs/6.x/eloquent-resources合作

例如对于show控制器的方法,我可以使用 laravel 路由模型绑定来做到这一点,如下所示:

class ProjectController extends Controller {
    public function show(Project $project) {
        return new ProjectResource($project);
    }
}

这按预期工作。但是当然,user(由令牌标识 - 这已经在工作)应该只projectscompany他所属的他那里看到/列出/更新/删除。

现在我可以忘记路由模型绑定并像这样手动进行:

    public function show($id, Request $request) {
        $project = Project::query()
            ->where("id", $id)
            ->whereHas("company",function ($query) use ($request) {
                $query->where('id', $request->user()->company_id);
            })
            ->first();

        return $project ? new ProjectResource($project) : Route::respondWithRoute('api.fallback.404');
    }

但这是他们要走的路吗?以相同的方式为所有其他资源(所有属于公司的 , 等)offices实现此代码的复制看起来像是重复的代码?customers

我当然可以让它更好一点,使用本地范围,但不确定是否有更好的方法?

4

1 回答 1

2

使用Policiescan中间件。对于 viewany 场景,我建议考虑全局范围。Project如果您的应用程序应该在大多数情况下进行过滤,那么全局范围应该可以解决问题。

于 2020-01-20T08:07:12.670 回答