Skip to content

Commit 3bda12b

Browse files
Merge pull request #2252 from suraj-webkul/issue#2241
Issue #2241 has been fixed.
2 parents f84e5a2 + 3a90d28 commit 3bda12b

File tree

1 file changed

+53
-21
lines changed

1 file changed

+53
-21
lines changed

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

Lines changed: 53 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,38 +2,38 @@
22

33
namespace Webkul\Admin\Http\Controllers\User;
44

5+
use Illuminate\Http\RedirectResponse;
6+
use Illuminate\Support\Collection;
7+
use Illuminate\View\View;
58
use Webkul\Admin\Http\Controllers\Controller;
9+
use Webkul\Core\Menu\MenuItem;
610

711
class SessionController extends Controller
812
{
913
/**
1014
* Show the form for creating a new resource.
11-
*
12-
* @return \Illuminate\View\View
1315
*/
14-
public function create()
16+
public function create(): RedirectResponse|View
1517
{
1618
if (auth()->guard('user')->check()) {
1719
return redirect()->route('admin.dashboard.index');
18-
} else {
19-
if (strpos(url()->previous(), 'admin') !== false) {
20-
$intendedUrl = url()->previous();
21-
} else {
22-
$intendedUrl = route('admin.dashboard.index');
23-
}
20+
}
2421

25-
session()->put('url.intended', $intendedUrl);
22+
$previousUrl = url()->previous();
2623

27-
return view('admin::sessions.login');
28-
}
24+
$intendedUrl = str_contains($previousUrl, 'admin')
25+
? $previousUrl
26+
: route('admin.dashboard.index');
27+
28+
session()->put('url.intended', $intendedUrl);
29+
30+
return view('admin::sessions.login');
2931
}
3032

3133
/**
3234
* Store a newly created resource in storage.
33-
*
34-
* @return \Illuminate\Http\Response
3535
*/
36-
public function store()
36+
public function store(): RedirectResponse
3737
{
3838
$this->validate(request(), [
3939
'email' => 'required|email',
@@ -54,9 +54,11 @@ public function store()
5454
return redirect()->route('admin.session.create');
5555
}
5656

57-
if (! bouncer()->hasPermission('dashboard')) {
58-
$availableNextMenu = menu()->getItems('admin')?->first();
57+
$menus = menu()->getItems('admin');
5958

59+
$availableNextMenu = $menus?->first();
60+
61+
if (! bouncer()->hasPermission('dashboard')) {
6062
if (is_null($availableNextMenu)) {
6163
session()->flash('error', trans('admin::app.users.not-permission'));
6264

@@ -68,18 +70,48 @@ public function store()
6870
return redirect()->to($availableNextMenu->getUrl());
6971
}
7072

71-
return redirect()->intended(route('admin.dashboard.index'));
73+
$hasAccessToIntendedUrl = $this->canAccessIntendedUrl($menus, redirect()->getIntendedUrl());
74+
75+
if ($hasAccessToIntendedUrl) {
76+
return redirect()->intended(route('admin.dashboard.index'));
77+
}
78+
79+
return redirect()->to($availableNextMenu->getUrl());
7280
}
7381

7482
/**
7583
* Remove the specified resource from storage.
76-
*
77-
* @return \Illuminate\Http\Response
7884
*/
79-
public function destroy()
85+
public function destroy(): RedirectResponse
8086
{
8187
auth()->guard('user')->logout();
8288

8389
return redirect()->route('admin.session.create');
8490
}
91+
92+
/**
93+
* Find menu item by URL.
94+
*/
95+
protected function canAccessIntendedUrl(Collection $menus, ?string $url): ?MenuItem
96+
{
97+
if (is_null($url)) {
98+
return null;
99+
}
100+
101+
foreach ($menus as $menu) {
102+
if ($menu->getUrl() === $url) {
103+
return $menu;
104+
}
105+
106+
if ($menu->haveChildren()) {
107+
$found = $this->canAccessIntendedUrl($menu->getChildren(), $url);
108+
109+
if ($found) {
110+
return $found;
111+
}
112+
}
113+
}
114+
115+
return null;
116+
}
85117
}

0 commit comments

Comments
 (0)