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:
@@ -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;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user