Skip to content

Commit d71cae7

Browse files
committed
Issue krayin#1654 fixed.
1 parent 108e423 commit d71cae7

File tree

2 files changed

+37
-6
lines changed

2 files changed

+37
-6
lines changed

packages/Webkul/Admin/src/Http/Controllers/User/SessionController.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,20 +40,26 @@ public function store()
4040
'password' => 'required',
4141
]);
4242

43-
if (! auth()->guard('user')->attempt(request(['email', 'password']), request('remember'))) {
43+
$user = auth()->guard('user');
44+
45+
if (! $user->attempt(request(['email', 'password']), request('remember'))) {
4446
session()->flash('error', trans('admin::app.users.login-error'));
4547

4648
return redirect()->back();
4749
}
4850

49-
if (auth()->guard('user')->user()->status == 0) {
51+
if ($user->user()->status == 0) {
5052
session()->flash('warning', trans('admin::app.users.activate-warning'));
5153

52-
auth()->guard('user')->logout();
54+
$user->logout();
5355

5456
return redirect()->route('admin.session.create');
5557
}
5658

59+
if ($user->user()->role->permission_type !== 'all') {
60+
return redirect()->route(menu()->getItems('admin')->first()->getRoute());
61+
}
62+
5763
return redirect()->intended(route('admin.dashboard.index'));
5864
}
5965

packages/Webkul/Core/src/Menu.php

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,8 @@ public function getItems(?string $area = null, string $key = ''): Collection
8080
$this->prepareMenuItems();
8181
}
8282

83-
$items = collect($this->items)->sortBy(fn ($item) => $item->getPosition());
84-
85-
return $items;
83+
return collect($this->removeUnauthorizedMenuItem())
84+
->sortBy(fn ($item) => $item->getPosition());
8685
}
8786

8887
/**
@@ -185,4 +184,30 @@ private function findMatchingItem($items, $currentKey): ?MenuItem
185184

186185
return null;
187186
}
187+
188+
/**
189+
* Remove unauthorized menu item.
190+
*/
191+
private function removeUnauthorizedMenuItem(): array
192+
{
193+
return collect($this->items)->map(function ($item) {
194+
$this->removeChildrenUnauthorizedMenuItem($item);
195+
196+
return $item;
197+
})->toArray();
198+
}
199+
200+
/**
201+
* Remove unauthorized menuItem's children. This will handle all levels.
202+
*/
203+
private function removeChildrenUnauthorizedMenuItem(MenuItem &$menuItem): void
204+
{
205+
if ($menuItem->haveChildren()) {
206+
$firstChildrenItem = $menuItem->getChildren()->first();
207+
208+
$menuItem->setRoute($firstChildrenItem->getRoute());
209+
210+
$this->removeChildrenUnauthorizedMenuItem($firstChildrenItem);
211+
}
212+
}
188213
}

0 commit comments

Comments
 (0)