0

In laravel 9.52.5 / filament/filament ^2.17.21 / filament/forms ^2.17.21" app I added filament/spatie-laravel-settings-plugin 2.17.21 plugin and created settings page with command:

php artisan make:filament-settings-page ManageAppSettings  AppSettings

I got 2 file:

app/Filament/Pages/ManageAppSettings.php :

<?php

namespace App\Filament\Pages;

use App\Settings\AppSettings;
use Filament\Forms\Components\TextInput;
use Filament\Pages\SettingsPage;

class ManageAppSettings extends SettingsPage
{
    protected static ?string $navigationIcon = 'heroicon-o-cog';
    protected static ?string $navigationGroup = 'Settings';

    protected static string $settings = AppSettings::class;

    protected function getFormSchema(): array
    {
        \Log::info(varDump(-1, ' -1 app/Filament/Pages/ManageAppSettings.php::'));
        return [
            TextInput::make('site_name')
                ->label('Site name')
                ->required(),
            ...
        ];
    }

    public static function repository(): ?string
    {
        return 'common';
    }
}

and app/Settings/AppSettings.php :

<?php

namespace App\Settings;

use Spatie\LaravelSettings\Settings;

class AppSettings extends Settings
{
    public string $site_name;
    ... 
    public static function group(): string
    {
        \Log::info(varDump(-11, ' -11 app/Settings/AppSettings.php::'));
        return 'common';
    }

I created Policy :

php artisan make:policy AppSettingsPolicy  

I did not use any model in this command like

--model=AppSettings

as I do not have any model file like App/Models/AppSettings

I tried to debug app/Policies/AppSettingsPolicy.php file with lines :

<?php

namespace App\Policies;

use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;

class AppSettingsPolicy
{
    use HandlesAuthorization;

    public function __construct()
    {
        \Log::info(varDump(auth()->user()->id, ' -1 AppSettingsPolicy __construct auth()->user()->id::'));

    }

    public function __invoke($x)
    {
        \Log::info(varDump(auth()->user()->id, ' -1 AppSettingsPolicy __invoke auth()->user()->id::'));
    }
}
 

But running settings page with url

/admin/manage-app-settings

I do not find any lines from app/Policies/AppSettingsPolicy.php in log file.

In file app/Providers/AuthServiceProvider.php I tried to assign policy file just I do with other models :

class AuthServiceProvider extends ServiceProvider
{
    protected $policies
        = [
               'App\Settings\AppSettings'  => 'App\Policies\AppSettingsPolicy',


               'App\Filament\Pages\ManageAppSettings'  => 'App\Policies\AppSettingsPolicy',
            
               'App\Models\Banner'         => 'App\Policies\BannerPolicy',
                ...

            

I also tried to define it as :

class AuthServiceProvider extends ServiceProvider
{
    protected $policies
        = [
                ManageAppSettings::class => AppSettingsPolicy::class,
                ...

I do not see amy log messages from AppSettingsPolicy file...

In which way can I use AppSettingsPolicy ? Are there some other way to restrict access to App\Settings\AppSettings ?

mstdmstd
  • 2,195
  • 17
  • 63
  • 140

0 Answers0