hak akses konsisten: sidebar Master Data pakai permission per-menu (+directive canAnyPermission); FIX direktif canPermission pakai canPermission() model (sebelumnya hanya role kolom — multi-role & user tanpa kolom role tidak dapat menu) + test

This commit is contained in:
Sari
2026-08-03 09:58:52 +07:00
parent 6dcb4c0619
commit 3bfad9cf42
3 changed files with 44 additions and 12 deletions
+15 -11
View File
@@ -4,7 +4,6 @@ namespace App\Providers;
use Illuminate\Pagination\Paginator;
use Illuminate\Support\Facades\Blade;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
@@ -30,17 +29,22 @@ class AppServiceProvider extends ServiceProvider
if (! $user) {
return false;
}
if ($user->role === 'admin') {
return true;
return $user->canPermission($permission);
});
// Blade directive: @canAnyPermission('a', 'b', ...) — true jika user punya SALAH SATU permission
Blade::if('canAnyPermission', function (string ...$permissions) {
$user = auth()->user();
if (! $user) {
return false;
}
$rolePermissions = Cache::remember('role_permissions:' . $user->role, 3600, function () use ($user) {
return \DB::table('role_permissions')
->join('permissions', 'role_permissions.permission_id', '=', 'permissions.id')
->where('role_permissions.role', $user->role)
->pluck('permissions.key')
->toArray();
});
return in_array($permission, $rolePermissions);
foreach ($permissions as $permission) {
if ($user->canPermission($permission)) {
return true;
}
}
return false;
});
}
}