ikinci temizlik tamamlandı
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
@php
|
||||
use App\Models\DocumentManagerPermission;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
|
||||
$userLevel = $request->get('user_level');
|
||||
$permissionsJson = $request->get('permissions', '{}');
|
||||
$permissions = json_decode($permissionsJson, true) ?: [];
|
||||
|
||||
if (!$userLevel) {
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode(['success' => false, 'message' => 'User level is required']);
|
||||
exit;
|
||||
}
|
||||
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
|
||||
// 1. Delete ALL existing permissions for this user level
|
||||
// This is the most reliable way to ensure "unchecked" permissions are removed
|
||||
DocumentManagerPermission::where('user_level', $userLevel)->delete();
|
||||
\Log::info("Deleted all existing permissions for user level", ['user_level' => $userLevel]);
|
||||
|
||||
// 2. Insert ONLY the permissions sent in the request
|
||||
// We only store "Allow" permissions. Absence of a record means "No Explicit Permission"
|
||||
// (which falls back to inheritance or default deny)
|
||||
$insertCount = 0;
|
||||
|
||||
foreach ($permissions as $folderPath => $types) {
|
||||
// Skip if types is not an array or empty
|
||||
if (!is_array($types) || empty($types)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach ($types as $permissionType) {
|
||||
// Only allow valid permission types
|
||||
if (!in_array($permissionType, ['read', 'write'])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
DocumentManagerPermission::create([
|
||||
'user_level' => $userLevel,
|
||||
'folder_path' => $folderPath,
|
||||
'permission_type' => $permissionType,
|
||||
'is_allowed' => true // We only save TRUE permissions
|
||||
]);
|
||||
|
||||
$insertCount++;
|
||||
}
|
||||
}
|
||||
|
||||
DB::commit();
|
||||
|
||||
// Clear cache for this user level
|
||||
DocumentManagerPermission::clearPermissionCache($userLevel);
|
||||
|
||||
// Log permission changes
|
||||
\Log::info('Document Manager Permissions Updated', [
|
||||
'user_level' => $userLevel,
|
||||
'updated_by' => Auth::user()->id ?? 'Unknown',
|
||||
'inserted_records' => $insertCount,
|
||||
'folders_count' => count($permissions)
|
||||
]);
|
||||
|
||||
// Clear cache after saving permissions
|
||||
Cache::flush();
|
||||
\App\Models\DocumentManagerPermission::clearAllCaches();
|
||||
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode(['success' => true, 'message' => 'Permissions saved successfully']);
|
||||
|
||||
} catch (Exception $e) {
|
||||
DB::rollback();
|
||||
|
||||
\Log::error("Error saving permissions", [
|
||||
'error' => $e->getMessage(),
|
||||
'trace' => $e->getTraceAsString()
|
||||
]);
|
||||
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode(['success' => false, 'message' => 'Error saving permissions: ' . $e->getMessage()]);
|
||||
}
|
||||
@endphp
|
||||
Reference in New Issue
Block a user