Где поставить локальный охват во многих сценариях - PullRequest
0 голосов
/ 26 июня 2019

Буду признателен за понимание следующего вопроса.Сначала набросок таблиц в игре.

**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');
    }

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...