Skip to content

Commit b662df6

Browse files
committed
Issue #2241 has been fixed.
1 parent 0850bf9 commit b662df6

File tree

1 file changed

+52
-20
lines changed

1 file changed

+52
-20
lines changed

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

Lines changed: 52 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,38 +2,37 @@
22

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

5+
use Illuminate\View\View;
6+
use Illuminate\Support\Collection;
7+
use Illuminate\Http\RedirectResponse;
58
use Webkul\Admin\Http\Controllers\Controller;
69

710
class SessionController extends Controller
811
{
912
/**
1013
* Show the form for creating a new resource.
11-
*
12-
* @return \Illuminate\View\View
1314
*/
14-
public function create()
15+
public function create(): RedirectResponse|View
1516
{
1617
if (auth()->guard('user')->check()) {
1718
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-
}
19+
}
2420

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

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

3132
/**
3233
* Store a newly created resource in storage.
33-
*
34-
* @return \Illuminate\Http\Response
3534
*/
36-
public function store()
35+
public function store(): RedirectResponse
3736
{
3837
$this->validate(request(), [
3938
'email' => 'required|email',
@@ -54,9 +53,11 @@ public function store()
5453
return redirect()->route('admin.session.create');
5554
}
5655

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

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

@@ -68,18 +69,49 @@ public function store()
6869
return redirect()->to($availableNextMenu->getUrl());
6970
}
7071

72+
$intendedUrl = redirect()->getIntendedUrl();
73+
74+
$routeName = $this->findIntendedRoute($menus, $intendedUrl);
75+
76+
if (
77+
$routeName
78+
&& ! bouncer()->hasPermission($routeName->getKey())
79+
) {
80+
return redirect()->to($availableNextMenu->getUrl());
81+
}
82+
7183
return redirect()->intended(route('admin.dashboard.index'));
7284
}
7385

7486
/**
7587
* Remove the specified resource from storage.
76-
*
77-
* @return \Illuminate\Http\Response
7888
*/
79-
public function destroy()
89+
public function destroy(): RedirectResponse
8090
{
8191
auth()->guard('user')->logout();
8292

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

0 commit comments

Comments
 (0)