我有一个允许多个用户的应用程序。每个用户之间完全隔离;这意味着数据库中所有非用户的内容都有一个user_id列,并且只有登录用户才可以查看、更新或删除它们。此外,用户不能使用其他人的 user_id 创建行。
有没有内置的方法可以用 Lumen/Lighthouse 来解决这个问题?这是我所做的,它有效,但我想知道我是否重新发明了轮子:
每个模型都有一个user关系,如下所示:
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
我在这些模型中添加了一个HasOwnerTrait,其中包含以下内容:
public static function boot()
{
parent::boot();
static::creating(function (Model $model) {
$model->user_id = Auth::user()->id;
});
static::saving(function (Model $model) {
if ($model->user_id !== Auth::user()->id) {
$exception = new ModelNotFoundException();
$exception->setModel(self::class, $model->id);
throw $exception;
}
});
static::deleting(function (Model $model) {
if ($model->user_id !== Auth::user()->id) {
$exception = new ModelNotFoundException();
$exception->setModel(self::class, $model->id);
throw $exception;
}
});
}
public function scopeIsOwner($query)
{
return $query->where('user_id', Auth::user()->id);
}
最后,在我的模式定义中:
type Query {
recipes: [Recipe!]! @all(scopes: ["isOwner"])
}
type Mutation {
createRecipe(input: CreateRecipeInput! @spread): Recipe @create
updateRecipe(id: ID!, input: UpdateRecipeInput! @spread): Recipe @update
deleteRecipe(id: ID!): Recipe @delete
}
同样,这是可行的,但是是否需要像这样临时使用,或者是否有更好的方法?
拉风的咖菲猫