Давайте предложим этот пейзаж:
У нас есть 3 модели -> Пользователь, Роль и Разрешение.
Отношения
- Пользователь имеет отношение один ко многим с ролью.
- Роль имеет много-много отношений с Разрешением
- У пользователя много-много отношений с Разрешением.
Конечная цель отношений между пользователем и разрешением - переопределить разрешение, назначенное пользователю через его роль. Просто исключение для этого пользователя.
Я пытаюсь что-то вроде этого:
public function permissions () {
return $this->hasManyThrough('App\Permission', 'App\Role')->merge($this->permissionOverrides);
}
В этом случае, когда я пытаюсь загрузить модель разрешений, Laravel выдает ошибку, потому что разрешения не определяются как отношения.
С другой стороны, что если мы изменим отношение «пользователь - роль» на многие на многие ?
Большое спасибо за ваши знания!
EDIT
Ролевые отношения
public function permissions() {
return $this->belongsToMany('App\Permission')->withTimestamps();
}
Отношения разрешения
public function roles() {
return $this->belongsToMany('App\Role')->withTimestamps();
}
Отношения с пользователем
public function roles() {
return $this->belongsToMany('App\Role')->withTimestamps();
}
public function permissionOverrides() {
return $this->belongsToMany('App\Permission')->withTimestamps();
}
Вопрос в том, как сделать отношение permissions()
, объединяющее разрешения роли и разрешения пользователя.
ЛУЧШЕ ОБЪЯСНЕНИЕ
Из-за недопонимания, показанного в комментариях, я попытаюсь объяснить это лучше. Я установил все отношения между App \ User и App \ Role; Я также установил отношения между App \ Role и App \ Permission. Я могу сделать прямо сейчас:
$user->role->permissions;
Для получения этого я настроил сводную таблицу Права_роли, которая хранит отношение.
Это не тот случай. Я хочу добавить еще одну переменную в уравнение. Теперь я хочу иметь возможность переопределить разрешения роли, добавив связь между App \ User и App \ Permission. У меня есть сводная таблицаmission_user и установил отношение:
public function permissionsOverride() {
return $this->belongsToMany('App\Permission');
}
REAL QUESTION - как получить все разрешения (как роли, так и переопределенные разрешения только в ОДНОМ отношении). Я имею в виду объединение обоих отношений.
Почему я хочу объединить отношения? Я мог бы сделать обычную функцию для этого, но я бы хотел загрузить это отношение, Laravel.