From bf199b739090a708baddbb69e0c5c923683e14fd Mon Sep 17 00:00:00 2001 From: Geriano Date: Sat, 16 Jul 2022 03:29:48 +0700 Subject: [PATCH] create user menus --- app/Models/User.php | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/app/Models/User.php b/app/Models/User.php index cf1cfde..380b765 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -70,11 +70,24 @@ class User extends Authenticatable public function menus() { return Menu::where(function (Builder $query) { - $this->permissions->each(fn (Permission $permission) => $query->orWhereRelation('permissions', 'id', $permission->id)); - $this->roles->each(function (Role $role) use ($query) { - $role->permissions->each(fn (Permission $permission) => $query->orWhereRelation('permissions', 'id', $permission->id)); - $query->orWhereRelation('roles', 'id', $role->id); - }); - })->get(); + $this->roles->each(function (Role $role) use ($query) { + $query->orWhereHas('permissions', function (Builder $query) use ($role) { + $query->whereIn('permissions.id', $role->permissions->pluck('id')->toArray()); + }); + }); + + $query->orWhereHas('roles', function (Builder $query) { + $query->whereIn('roles.id', $this->roles->pluck('id')->toArray()); + }); + + $query->orWhereHas('permissions', function (Builder $query) { + $query->whereIn('permissions.id', $this->permissions->pluck('id')->toArray()); + }); + }) + ->orWhere(function (Builder $query) { + $query->orDoesntHave('permissions'); + $query->orDoesntHave('roles'); + }) + ->get(); } }