Буду признателен за понимание следующего вопроса.Сначала набросок таблиц в игре.
**users**
user_id - integer
name - string
user_role_id - integer(default role for the user system wide)
**user_roles**
user_role_id - integer
name - string
**user_groups**
user_group_id - integer
name - string
**user_group_users**
user_id - integer
user_group_id - integer
user_role_id - integer(role is specific to user_group and overrides the default permissions for the user in the user group)
Я создал пользовательскую промежуточную модель для user_group_users , чтобы сохранить чистоту и помочь с доступом к данным.Но я борюсь с тем, где и как реализовать простую сферу.В настоящее время я могу получить все группы для конкретного пользователя с помощью Auth::user()->userGroups
, но я хотел бы иметь возможность фильтровать это, чтобы получать только те списки, для которых пользователь является администратором, т.е. где их user_role_id представляет администратора в user_group_users таблица.Я хотел бы иметь возможность сделать это так: Auth::user()->userGroups->isAdmin()
.
Где бы я поместил прицел в этой настройке?Я попытался поместить его в модель UserGroupUser , но это не сработало.
public function scopeIsAdmin($query){
return $query->where('user_role_id', 2);
}
Auth :: user () -> userGroups () -> isAdmin () результаты Call to undefined method Illuminate\Database\Eloquent\Relations\BelongsToMany::isAdmin()
Применимые отношения
**User.php**
public function userGroups()
{
return $this->belongsToMany('App\Models\UserGroup', 'user_group_users', 'user_id', 'user_group_id')
->using('App\Models\UserGroupUser');
}
**UserRole**
public function users()
{
return $this->hasMany('App\Models\User', 'user_role_id', 'user_role_id');
}
**UserGroup**
public function users()
{
return $this->belongsToMany('App\Models\User', 'user_group_users', 'user_group_id', 'user_id')
->using('App\Models\UserGroupUser');
}
**UserGroupUser.php**
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Relations\Pivot;
class UserGroupUser extends Pivot
{
protected $table = 'user_group_users';
public $timestamps = false;
public function user()
{
return $this->belongsTo('App\Models\User', 'user_id', 'user_id');
}
public function role()
{
return $this->belongsTo('App\Models\UserRole', 'user_role_id', 'user_role_id');
}
}