Pro Programmer
Use Single Login Route For Multiple Panels
LoginResponse:
LogoutResponse:
Everything is working as expected but the issue i am facing is that when the user is logged in as any role suppose as
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);
}
}
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);
}
}
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
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
Use Single Login Route For Multiple Panels
Actually i want a URL like
Admin Panel:
Group Panel:
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,
])
}
}
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())
;
}
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