У меня есть 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",
]
Так вот мои текущие настройки:
Models / 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);
}
Теперь я настроил Пространство / Разрешение со следующими Roles
:
Super-Admin
: будет видеть каждый Objects
каждого Branch
Admin
: будет видеть каждый Objects
своегоBranch
, а не от других Branches
User
: будет видеть каждый Objects
, которого он создал, не создавая ничего другого в своем Branch
или вне его
Моя цель сейчас состоит в том, чтобы перечислить все 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);
}
Имеет ли это смысл вообще?Должен ли я использовать другие более подходящие функции / API Laravel?