问题描述
我有一个允许多个用户的应用程序。每个用户都是彼此完全隔离的;这意味着不是数据库用户的所有内容都有一个export const customArray = createSelector(
arrayCustomizations,(entities: Dictionary<Customizations>,props: { id: string }) => {
const customizations = entities[props.id];
return customizations.allCustoms;
},).pipe(
filter(object => object.name !== null)
);
列,并且只允许登录用户查看,更新或删除它们。此外,用户无法使用其他人的user_id创建行。
是否有内置方法可通过流明/灯塔解决此问题?这是我已经完成的工作,并且可以运行,但是我想知道是否重新发明了轮子:
- 每个模型都具有
user_id
关系,如下所示:
user
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);
}
再次,这是可行的,但是是否需要像这样临时进行,还是有更好的方法?
解决方法
我认为您的解决方案很好,这样可以节省编写一堆样板的工作。一些小建议:
通过将boot
方法重命名为bootHasOwnerTrait
,可以使您的特征成为可引导特征,框架会自动调用该特征。
默认情况下,可以考虑使isOwner
范围处于活动状态。在Laravel中,这令人困惑地称为 global scope 。这允许您省略显式命名范围,尽管如果您有一些查询不适用于该范围,例如仍然可以忽略它。统计信息。