From 10f77f8e05071fa646e649e656350e545234b6ec Mon Sep 17 00:00:00 2001 From: Tomasz Boruc Date: Fri, 4 Sep 2026 22:01:19 +0200 Subject: [PATCH] Dodanie uprawnien all dashboard --- app/Http/Controllers/DashboardController.php | 9 ++- ...0002_add_show_all_dashbaord_permission.php | 55 +++++++++++++++++++ database/seeders/DatabaseSeeder.php | 2 + resources/views/dashboard.blade.php | 4 +- tests/Feature/AdvanceTest.php | 21 +++++++ tests/Feature/VehicleTest.php | 6 ++ 6 files changed, 92 insertions(+), 5 deletions(-) create mode 100644 database/migrations/2026_09_04_000002_add_show_all_dashbaord_permission.php diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php index f0d880f..b96d3a3 100644 --- a/app/Http/Controllers/DashboardController.php +++ b/app/Http/Controllers/DashboardController.php @@ -16,11 +16,13 @@ class DashboardController extends Controller { $user = auth()->user(); - if ($user && $user->hasRole('pracownik')) { + $showAllDashboard = $user?->hasPermissionTo('show_all_dashbaord') ?? false; + + if (! $showAllDashboard) { $myVehicles = $user->vehicles()->orderBy('brand')->orderBy('model')->get(); $myAdvances = $user->advances()->with('type')->orderByDesc('date')->orderByDesc('id')->get(); - return view('dashboard', compact('myVehicles', 'myAdvances')); + return view('dashboard', compact('myVehicles', 'myAdvances', 'showAllDashboard')); } $totalUsers = User::whereNull('deleted_at')->count(); @@ -64,7 +66,8 @@ class DashboardController extends Controller 'workerCount', 'recentUsers', 'lowestAdvanceBalances', - 'vehiclesDueSoon' + 'vehiclesDueSoon', + 'showAllDashboard' )); } } diff --git a/database/migrations/2026_09_04_000002_add_show_all_dashbaord_permission.php b/database/migrations/2026_09_04_000002_add_show_all_dashbaord_permission.php new file mode 100644 index 0000000..3986d2b --- /dev/null +++ b/database/migrations/2026_09_04_000002_add_show_all_dashbaord_permission.php @@ -0,0 +1,55 @@ +updateOrInsert( + ['name' => 'show_all_dashbaord', 'guard_name' => 'web'], + ['created_at' => now(), 'updated_at' => now()] + ); + + $permissionId = DB::table($permissionsTable) + ->where('name', 'show_all_dashbaord') + ->where('guard_name', 'web') + ->value('id'); + $rolesTable = config('permission.table_names.roles', 'roles'); + $rolePermissionsTable = config('permission.table_names.role_has_permissions', 'role_has_permissions'); + $roleIds = DB::table($rolesTable) + ->whereIn('name', ['admin', 'kierownik']) + ->where('guard_name', 'web') + ->pluck('id'); + + foreach ($roleIds as $roleId) { + DB::table($rolePermissionsTable)->insertOrIgnore([ + 'permission_id' => $permissionId, + 'role_id' => $roleId, + ]); + } + + app(PermissionRegistrar::class)->forgetCachedPermissions(); + } + + public function down(): void + { + $permissionsTable = config('permission.table_names.permissions', 'permissions'); + $rolePermissionsTable = config('permission.table_names.role_has_permissions', 'role_has_permissions'); + $permissionId = DB::table($permissionsTable) + ->where('name', 'show_all_dashbaord') + ->where('guard_name', 'web') + ->value('id'); + + if ($permissionId) { + DB::table($rolePermissionsTable)->where('permission_id', $permissionId)->delete(); + DB::table($permissionsTable)->where('id', $permissionId)->delete(); + } + + app(PermissionRegistrar::class)->forgetCachedPermissions(); + } +}; \ No newline at end of file diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index a6a28b6..b1bbadc 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -24,6 +24,7 @@ class DatabaseSeeder extends Seeder 'zaliczki_access', 'users_access', 'setting_access', + 'show_all_dashbaord', ]; foreach ($permissions as $permission) { @@ -41,6 +42,7 @@ class DatabaseSeeder extends Seeder $kierownikRole->syncPermissions([ 'users_access', 'setting_access', + 'show_all_dashbaord', 'raporty_access', 'flota_access', 'zaliczki_access', diff --git a/resources/views/dashboard.blade.php b/resources/views/dashboard.blade.php index f042b30..1bfe76d 100644 --- a/resources/views/dashboard.blade.php +++ b/resources/views/dashboard.blade.php @@ -1,14 +1,14 @@

- {{ auth()->user()->hasRole('pracownik') ? 'Mój dashboard' : __('Dashboard') }} + {{ $showAllDashboard ? __('Dashboard') : 'Mój dashboard' }}

- @if(auth()->user()->hasRole('pracownik')) + @if(! $showAllDashboard)

Mój samochód

diff --git a/tests/Feature/AdvanceTest.php b/tests/Feature/AdvanceTest.php index 5017a7a..0790347 100644 --- a/tests/Feature/AdvanceTest.php +++ b/tests/Feature/AdvanceTest.php @@ -15,6 +15,12 @@ function userWithAdvanceAccess(string $roleName = 'pracownik'): User $user = User::factory()->create(); $role = Role::firstOrCreate(['name' => $roleName]); $role->givePermissionTo('zaliczki_access'); + + if ($roleName === 'kierownik') { + Permission::firstOrCreate(['name' => 'show_all_dashbaord']); + $role->givePermissionTo('show_all_dashbaord'); + } + $user->assignRole($role); return $user; @@ -307,6 +313,21 @@ test('dashboard shows the lowest advance balances for employees', function () { $response->assertSee('-200,00'); }); +test('role without show all dashboard permission sees only its own dashboard', function () { + Permission::firstOrCreate(['name' => 'zaliczki_access']); + + $user = User::factory()->create(); + $role = Role::firstOrCreate(['name' => 'brygadzista']); + $role->givePermissionTo('zaliczki_access'); + $user->assignRole($role); + + $response = $this->actingAs($user)->get(route('dashboard')); + + $response->assertOk(); + $response->assertSee('Mój dashboard'); + $response->assertDontSee('Wszyscy użytkownicy'); +}); + test('dashboard prioritizes negative balances over zero balances', function () { $manager = userWithAdvanceAccess('kierownik'); $fuel = AdvanceType::create(['name' => 'Paliwo']); diff --git a/tests/Feature/VehicleTest.php b/tests/Feature/VehicleTest.php index 35c4f45..a504d23 100644 --- a/tests/Feature/VehicleTest.php +++ b/tests/Feature/VehicleTest.php @@ -14,6 +14,12 @@ function createFleetUser(string $roleName = 'pracownik'): User $user = User::factory()->create(); $role = Role::firstOrCreate(['name' => $roleName]); $role->givePermissionTo('flota_access'); + + if ($roleName === 'kierownik') { + Permission::firstOrCreate(['name' => 'show_all_dashbaord']); + $role->givePermissionTo('show_all_dashbaord'); + } + $user->assignRole($role); return $user;