【发布时间】:2019-02-16 04:07:56
【问题描述】:
我有 3 个主要模型:
- 用户
- 分支机构
- 对象
每个用户都属于Branch,而Branch 将拥有许多Users。
Objects 将属于Users 和Branch,所以Objects 有一个user_id 和一个branch_id,就像这样:
//Objects DB table tructure
[
"id",
"name",
"branch_id",
"user_id",
"created_at",
"updated_at",
]
这是我目前的设置:
模型/Branch.php
public function users()
{
return $this->hasMany(User::class);
}
Models/Users.php
public function branch()
{
return $this->belongsTo(Branch::class);
}
Models/Objects.php
public function user()
{
return $this->belongsTo(User::class);
}
现在我已经设置了Spatie/Permission 和以下Roles:
-
Super-Admin:将看到每个Objects的每个Branch -
Admin:将看到它自己的每个ObjectsBranch,而不是来自其他Branches -
User:将看到他在自己的Branch或外部创建的每一个Objects,而不是任何其他人
我现在的意思是根据用户权限列出所有Objects。
我的第一个想法是基于模型建立关系,但我不确定这是一个好主意和实践,这是代码:
public function objects(){
$user = auth()->user();
if ($user->hasRole("Super-Admin")) {
return Object::query();
}
if ($user->hasRole("Admin")) {
return Object::where('branch_id', '=', $user->branch()->pluck('id'));
}
return $this->hasMany(Object::class);
}
这有意义吗?我应该使用其他更合适的 Laravel 功能/API 吗?
【问题讨论】:
标签: php laravel multi-tenant