diff --git a/app/Providers/NovaServiceProvider.php b/app/Providers/NovaServiceProvider.php index 9afd12a..9998472 100644 --- a/app/Providers/NovaServiceProvider.php +++ b/app/Providers/NovaServiceProvider.php @@ -3,19 +3,8 @@ namespace App\Providers; use App\Nova\Dashboards\Main; -use App\Nova\Resources\Branch\Branch; -use App\Nova\Resources\Order\Card\CardOrder; -use App\Nova\Resources\Order\Card\CardState; -use App\Nova\Resources\Order\Card\CardType; -use App\Nova\Resources\Order\Card\Pin\CardPin; -use App\Nova\Resources\Order\Card\Requisite\CardRequisite; -use App\Nova\Resources\Order\Loan\LoanOrder; -use App\Nova\Resources\Order\Loan\LoanPaidOffLetterOrder; -use App\Nova\Resources\Order\Loan\LoanType; -use App\Nova\Resources\System\Location\Province; -use App\Nova\Resources\System\Roles\Permission; -use App\Nova\Resources\System\Roles\Role; use App\Nova\User; +use App\Repos\System\Nova\NovaMenuRepo; use App\Repos\System\Nova\NovaRepo; use Eolica\NovaLocaleSwitcher\LocaleSwitcher; use Illuminate\Http\Request; @@ -23,9 +12,7 @@ use Illuminate\Support\Facades\Gate; use Laravel\Nova\Events\ServingNova; use Laravel\Nova\Fields\Date; use Laravel\Nova\Menu\Menu; -use Laravel\Nova\Menu\MenuGroup; use Laravel\Nova\Menu\MenuItem; -use Laravel\Nova\Menu\MenuSection; use Laravel\Nova\Nova; use Laravel\Nova\NovaApplicationServiceProvider; use Spatie\BackupTool\BackupTool; @@ -114,56 +101,7 @@ class NovaServiceProvider extends NovaApplicationServiceProvider */ public function setupNavigation(): void { - Nova::mainMenu(function (Request $request) { - return [ - MenuSection::dashboard(Main::class)->icon('chart-bar'), - - MenuSection::make(__('Orders'), [ - MenuGroup::make(__('Loan department'), [ - MenuItem::resource(LoanOrder::class), - MenuItem::resource(LoanPaidOffLetterOrder::class), - ])->collapsedByDefault(), - - MenuGroup::make(__('Card department'), [ - MenuItem::resource(CardOrder::class)->name(__('Order new card')), - MenuItem::resource(CardRequisite::class), - MenuItem::resource(CardPin::class), - ])->collapsedByDefault(), - ])->icon('ticket')->collapsedByDefault(), - - MenuSection::make(__('System'), [ - MenuGroup::make(__('Users'), [ - MenuItem::resource(User::class), - MenuItem::resource(Role::class), - MenuItem::resource(Permission::class), - ])->collapsedByDefault(), - - MenuGroup::make(__('Loan'), [ - MenuItem::resource(LoanType::class), - ])->collapsedByDefault(), - - MenuGroup::make(__('Card'), [ - MenuItem::resource(CardState::class), - MenuItem::resource(CardType::class), - ])->collapsedByDefault(), - - MenuGroup::make(__('Location'), [ - MenuItem::resource(Province::class), - MenuItem::resource(Branch::class), - ])->collapsedByDefault(), - ])->icon('cog')->collapsedByDefault(), - - MenuSection::make(__('Backups')) - ->path('/backups') - ->icon('server') - ->canSee(fn () => auth()->user()->isSuperAdmin()), - - MenuSection::make(__('Logs')) - ->path('/logs') - ->icon('document-text') - ->canSee(fn () => auth()->user()->isSuperAdmin()), - ]; - }); + Nova::mainMenu(fn (Request $request) => NovaMenuRepo::items($request)); } /** diff --git a/app/Repos/System/Nova/NovaMenuRepo.php b/app/Repos/System/Nova/NovaMenuRepo.php new file mode 100644 index 0000000..b4f8a7c --- /dev/null +++ b/app/Repos/System/Nova/NovaMenuRepo.php @@ -0,0 +1,80 @@ +icon('chart-bar'), + + MenuSection::make(__('Orders'), [ + MenuGroup::make(__('Loan department'), [ + MenuItem::resource(LoanOrder::class), + MenuItem::resource(LoanPaidOffLetterOrder::class), + ])->collapsedByDefault(), + + MenuGroup::make(__('Card department'), [ + MenuItem::resource(CardOrder::class)->name(__('Order new card')), + MenuItem::resource(CardRequisite::class), + MenuItem::resource(CardPin::class), + ])->collapsedByDefault(), + ])->icon('ticket')->collapsedByDefault(), + + MenuSection::make(__('System'), [ + MenuGroup::make(__('Users'), [ + MenuItem::resource(User::class), + MenuItem::resource(Role::class), + MenuItem::resource(Permission::class), + ])->collapsedByDefault(), + + MenuGroup::make(__('Loan'), [ + MenuItem::resource(LoanType::class), + ])->collapsedByDefault(), + + MenuGroup::make(__('Card'), [ + MenuItem::resource(CardState::class), + MenuItem::resource(CardType::class), + ])->collapsedByDefault(), + + MenuGroup::make(__('Location'), [ + MenuItem::resource(Province::class), + MenuItem::resource(Branch::class), + ])->collapsedByDefault(), + ])->icon('cog')->collapsedByDefault(), + + MenuSection::make(__('Backups')) + ->path('/backups') + ->icon('server') + ->canSee(NovaPermissionRepo::isSuperAdmin()), + + MenuSection::make(__('Logs')) + ->path('/logs') + ->icon('document-text') + ->canSee(NovaPermissionRepo::isSuperAdmin()), + ]; + } +} diff --git a/app/Repos/System/Nova/NovaPermissionRepo.php b/app/Repos/System/Nova/NovaPermissionRepo.php new file mode 100644 index 0000000..6ef4c64 --- /dev/null +++ b/app/Repos/System/Nova/NovaPermissionRepo.php @@ -0,0 +1,33 @@ + Gate::allows('isMe', auth()->user()); + } + + /** + * Check if user is admin + */ + public static function isSuperAdmin(): Closure + { + return fn () => Gate::allows('isSuperAdmin', auth()->user()); + } + + /** + * Check if user is admin + */ + public static function isAdmin(): Closure + { + return fn () => Gate::allows('isAdmin', auth()->user()); + } +}