Pro Programmer
Pro Programmer
FFilament
Created by Pro Programmer on 2/10/2025 in #❓┊help
Use Single Login Route For Multiple Panels
LoginResponse:
class LoginResponse extends BaseLoginResponse

{

public function toResponse($request): RedirectResponse|Redirector

{

if (auth()->user()->hasRole('group-user')) {

return redirect()->route('filament.group.pages.dashboard');

}else if(auth()->user()->hasRole('admin-user'))

{

return redirect()->route('filament.admin.pages.dashboard');

}

return parent::toResponse($request);

}

}
class LoginResponse extends BaseLoginResponse

{

public function toResponse($request): RedirectResponse|Redirector

{

if (auth()->user()->hasRole('group-user')) {

return redirect()->route('filament.group.pages.dashboard');

}else if(auth()->user()->hasRole('admin-user'))

{

return redirect()->route('filament.admin.pages.dashboard');

}

return parent::toResponse($request);

}

}
LogoutResponse:
class LogoutResponse extends BaseLogoutResponse

{

public function toResponse($request): RedirectResponse

{

if (Filament::getCurrentPanel()->getId() === 'group') {

return redirect()->route('filament.login.auth.login');

} else if (Filament::getCurrentPanel()->getId() === 'admin') {

return redirect()->route('filament.login.auth.login');

}

return parent::toResponse($request);

}

}
class LogoutResponse extends BaseLogoutResponse

{

public function toResponse($request): RedirectResponse

{

if (Filament::getCurrentPanel()->getId() === 'group') {

return redirect()->route('filament.login.auth.login');

} else if (Filament::getCurrentPanel()->getId() === 'admin') {

return redirect()->route('filament.login.auth.login');

}

return parent::toResponse($request);

}

}
Everything is working as expected but the issue i am facing is that when the user is logged in as any role suppose as admin-user and in domain/admin and if i change the URL to domain/login then it is redirected to domain. What i want is if logged in any user tries to access the domain/login then it should redirect to their respective panel dashboard.
7 replies
FFilament
Created by Pro Programmer on 2/10/2025 in #❓┊help
Use Single Login Route For Multiple Panels
RoutesAccessMiddleware:
public function handle(Request $request, Closure $next): Response

{

// Redirect unauthenticated users trying to access protected routes

if (!auth()->check()) {

if ($request->is('group*') || $request->is('admin*')) {

return redirect()->route('filament.login.auth.login');

}

}

// Redirect authenticated users away from the login routes

if (auth()->check()) {

if ($request->is('group/login')) {

if (auth()->user()->hasRole('group-user')) {

return redirect()->route('filament.group.pages.dashboard');

} else {

// If the user doesn't have the group-admin role

abort(403, 'Unauthorized Action');

}

}

if ($request->is('admin/login')) {

if (auth()->user()->hasRole('admin-user')) {

return redirect()->route('filament.admin.pages.dashboard');

} else {

// If the user doesn't have the super-admin role

abort(403, 'Unauthorized Action');
}
}

if (auth()->check()) {

if ($request->is('/login')) {

if (auth()->user()->hasRole('admin-user')) {

return redirect()->route('filament.admin.pages.dashboard');

} else {
abort(403, 'Unauthorized Action');
}
}

if ($request->is('/login')) {

if (auth()->user()->hasRole('group-user')) {

return redirect()->route('filament.group.pages.dashboard');

} else {
abort(403, 'Unauthorized Action');

}
}
}
}
return $next($request);
}
public function handle(Request $request, Closure $next): Response

{

// Redirect unauthenticated users trying to access protected routes

if (!auth()->check()) {

if ($request->is('group*') || $request->is('admin*')) {

return redirect()->route('filament.login.auth.login');

}

}

// Redirect authenticated users away from the login routes

if (auth()->check()) {

if ($request->is('group/login')) {

if (auth()->user()->hasRole('group-user')) {

return redirect()->route('filament.group.pages.dashboard');

} else {

// If the user doesn't have the group-admin role

abort(403, 'Unauthorized Action');

}

}

if ($request->is('admin/login')) {

if (auth()->user()->hasRole('admin-user')) {

return redirect()->route('filament.admin.pages.dashboard');

} else {

// If the user doesn't have the super-admin role

abort(403, 'Unauthorized Action');
}
}

if (auth()->check()) {

if ($request->is('/login')) {

if (auth()->user()->hasRole('admin-user')) {

return redirect()->route('filament.admin.pages.dashboard');

} else {
abort(403, 'Unauthorized Action');
}
}

if ($request->is('/login')) {

if (auth()->user()->hasRole('group-user')) {

return redirect()->route('filament.group.pages.dashboard');

} else {
abort(403, 'Unauthorized Action');

}
}
}
}
return $next($request);
}
7 replies
FFilament
Created by Pro Programmer on 2/10/2025 in #❓┊help
Use Single Login Route For Multiple Panels
Actually i want a URL like domain/login and if i login in with credentials which has role admin-user should be redirected to the domain/admin and similarly for the group panel. How I did : I created another Panel called LoginPanel and used the above provided video reference for multi panel single login and i made the LoginPanel as default. Below i provided the code for reference: Login Panel:
class LoginPanelProvider extends PanelProvider

{

public function panel(Panel $panel): Panel

{

return $panel

->default()

->id('login')

->path('')

->login()

->colors([

'primary' => Color::Amber,

])

->middleware([

RoutesAccessMiddleware::class,

])

}

}
class LoginPanelProvider extends PanelProvider

{

public function panel(Panel $panel): Panel

{

return $panel

->default()

->id('login')

->path('')

->login()

->colors([

'primary' => Color::Amber,

])

->middleware([

RoutesAccessMiddleware::class,

])

}

}
Admin Panel:
class AdminPanelProvider extends PanelProvider

{

public function panel(Panel $panel): Panel

{

return $panel

->id('admin')

->path('admin')

->login()

->middleware([

RoutesAccessMiddleware::class,

])

->authMiddleware([

RedirectToProperPanelMiddleware::class,

Authenticate::class,

])->plugin(FilamentSpatieRolesPermissionsPlugin::make())

;

}
class AdminPanelProvider extends PanelProvider

{

public function panel(Panel $panel): Panel

{

return $panel

->id('admin')

->path('admin')

->login()

->middleware([

RoutesAccessMiddleware::class,

])

->authMiddleware([

RedirectToProperPanelMiddleware::class,

Authenticate::class,

])->plugin(FilamentSpatieRolesPermissionsPlugin::make())

;

}
Group Panel:
class GroupPanelProvider extends PanelProvider

{

public function panel(Panel $panel): Panel

{

return $panel

->id('group')

->path('group')

->login()

->middleware([

RoutesAccessMiddleware::class,

])

->authMiddleware([

RedirectToProperPanelMiddleware::class,

Authenticate::class,

]);

}
class GroupPanelProvider extends PanelProvider

{

public function panel(Panel $panel): Panel

{

return $panel

->id('group')

->path('group')

->login()

->middleware([

RoutesAccessMiddleware::class,

])

->authMiddleware([

RedirectToProperPanelMiddleware::class,

Authenticate::class,

]);

}
7 replies