Scoped Policies with multi guards

Hello, in my application, I have two guards wtih two different Models, Admin and User to handle my backend and frontend.

I have Policies on my existing Models for my frontend, though that accept User Model as first parameter of every method. Filament tries to use these Policies (https://filamentphp.com/docs/3.x/panels/resources/getting-started#authorization) but it obviously does not work since the argument passed is an instance of my Admin Model.

What i could do in my policies is to have a condition to check what type of User I have :

if ($user instanceof Admin) {
 // rules for backend
} elseif ($user isntanceof User) {
 // rules for frontend
}


But i'd rather have distincts Policies in different directories like
App\Policies\Admin
and
App\Policies\User


Can I achieve that ?
Solution
@LeandroFerreira Thank you for your answer, it helped me go on the right way ! This is the solution I made :

use Illuminate\Auth\Events\Authenticated;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\Gate;

public function boot(): void
{
    Gate::guessPolicyNamesUsing(function (string $modelClass) {
        $user = auth()->user();
        // If user is an Admin, use Admin policies
        if ($user instanceof Admin) {
            return 'App\\Policies\\Admin\\' . class_basename($modelClass) . 'Policy';
        } elseif ($user instanceof User) {
            return 'App\\Policies\\User\\' . class_basename($modelClass) . 'Policy';
        }
    });
}       
Was this page helpful?