Надеюсь, вы уловили мою мысль о моем титуле, хе-хе. Вот чего я хочу добиться.
У меня есть модель Пользователь, которая связана с Роли и Разрешения. Вот код:
class User extends Model {
....
public function roles() {
return $this->belongsToMany('App\Models\Roles');
}
public function permissions() {
return $this->belongsToMany('App\Models\Permissions');
}
}
и это работает нормально, но я хочу иметь еще одну функцию, подобную этой
....
public function permissions_by_roles() {
}
....
Потому что у каждого пользователя есть индивидуальные разрешения и разрешения, которые наследуются от ролей. Я хочу получить список разрешений пользователя в зависимости от ролей пользователя. Как я могу этого добиться? Вот мои таблицы:
users roles permissions role_user - contains all roles of each user(ex. admin, super admin, user) permission_user - contains all permissions of each user (ex. edit, delete) permission_role - contains all permissions for each roles.
Надеюсь, кто-нибудь мне поможет. Заранее спасибо! :)






При необходимости вы можете использовать отношение hasManyThrough в сочетании со слиянием:
class User extends Model {
....
public function roles() {
return $this->belongsToMany('App\Models\Roles');
}
public function permissions() {
return $this->belongsToMany('App\Models\Permissions');
}
public function inheritedPermissions() {
return $this->hasManyThrough('App\Models\Permissions', 'App\Models\Roles');
}
}
Затем, если вам нужны все разрешения пользователя, вы можете:
$user = User::with(["permissions", "inheritedPermissions"])->where("id", $id)->first();
Все разрешения будут:
$allPermissions = $user->permissions->merge($user->inheritedPermissions)->unique("id");
@aiipee Если пользовательские разрешения являются исключением, а не правилом, то альтернативой тому, что вы делаете, является полное удаление таблицы permission_user, а когда вам нужно добавить определенные разрешения для одного пользователя, просто создайте новую роль, которая называется что-то вроде UserXPermissionRole. и предоставить эту роль только пользователю X. Если вы сделаете это, вы также можете отбросить связь permissions и оставить только inheritedPermission
какая хорошая идея! Я сделаю это, большое спасибо за ваше предложение! :)
Оценил очень! Спасибо за помощь, я надеюсь, что вы также можете помочь мне с моими будущими проблемами, связанными с laravel, хе-хе! Спасибо!
Это именно то, что я ищу! Ты спас меня, хе-хе, большое спасибо !!