Browse Source

Update acl storage rules, whitelist converter

moell 11 months ago
parent
commit
91f2ace09e

+ 2 - 2
app/Http/Controllers/API/AssetController.php

@@ -35,7 +35,7 @@ class AssetController extends Controller
         $asset = Asset::create([
             ...$request->all(),
             'company_id' => Auth::user()->company_id,
-            'whitelist' => $request->whitelist ? sprintf(",%s", implode(',', $request->whitelist)) : null,
+            'whitelist' => $request->whitelist ? sprintf(",%s,", implode(',', $request->whitelist)) : null,
             'created_by' => Auth::id(),
         ]);
 
@@ -74,7 +74,7 @@ class AssetController extends Controller
         $path = $isUpdateParent ? $parentAsset->path . $asset->id . "," : $asset->path;
         $formData = [
             ...$request->all(),
-            'whitelist' => $request->whitelist ? sprintf(",%s", implode(',', $request->whitelist)) : null,
+            'whitelist' => $request->whitelist ? sprintf(",%s,", implode(',', $request->whitelist)) : null,
             'path' => $path
         ];
 

+ 2 - 2
app/Http/Controllers/API/ProjectController.php

@@ -99,7 +99,7 @@ class ProjectController extends Controller
             ...$request->all(),
             'company_id' => Auth::user()->company_id,
             'created_by' => Auth::id(),
-            'whitelist' => $request->whitelist ? sprintf(",%s", implode(',', $request->whitelist)) : null,
+            'whitelist' => $request->whitelist ? sprintf(",%s,", implode(',', $request->whitelist)) : null,
         ]);
 
         $project->save();
@@ -146,7 +146,7 @@ class ProjectController extends Controller
 
         $project->fill([
             ...$request->all(),
-            'whitelist' => $request->whitelist ? sprintf(",%s", implode(',', $request->whitelist)) : null,
+            'whitelist' => $request->whitelist ? sprintf(",%s,", implode(',', $request->whitelist)) : null,
         ]);
 
         $changes = ModelChangeDetector::detector(ActionObjectType::PROJECT, $project);

+ 1 - 1
app/Models/Asset.php

@@ -34,7 +34,7 @@ class Asset extends Model
         $query->where(function (Builder $query) {
             return $query->where('acl', AssetACL::PRIVATE->value)->where('owner', Auth::id());
         })->orWhere(function (Builder $query) {
-            return $query->where('acl', AssetACL::CUSTOM->value)->where('whitelist', 'like', '%' . Auth::id() . '%');
+            return $query->where('acl', AssetACL::CUSTOM->value)->where('whitelist', 'like', '%,' . Auth::id() . ',%');
         });
     }
 

+ 10 - 0
app/Models/Enums/ProjectACL.php

@@ -0,0 +1,10 @@
+<?php
+
+namespace App\Models\Enums;
+
+enum ProjectACL: string
+{
+    case PRIVATE = 'private';
+
+    case CUSTOM = 'custom';
+}

+ 17 - 2
app/Services/History/Converter/WhitelistConverter.php

@@ -3,9 +3,12 @@
 namespace App\Services\History\Converter;
 
 use App\Models\User;
+use Illuminate\Support\Collection;
 
 class WhitelistConverter extends EagerLoadingConverter implements ConverterContact
 {
+    protected static Collection $items;
+
     public function handle(mixed $value)
     {
         $ids = array_filter(explode(",", $value));
@@ -14,13 +17,25 @@ class WhitelistConverter extends EagerLoadingConverter implements ConverterConta
             return null;
         }
 
-        $users = User::query()->whereIn("id", $ids)->pluck("name");
+        $names = [];
+        foreach ($ids as $id) {
+            if (self::$items->has($id)) {
+                $names[] = self::$items->get($id);
+            }
+        }
 
-        return $users ? implode(",", $users->toArray()) : null;
+        return implode(",", $names);
     }
 
     public static function eagerLoad(array $items): void
     {
+        $ids = [];
+        foreach ($items as $item) {
+            $ids = [...$ids, ...array_filter(explode(",", $item))];
+        }
+
+        $ids = array_unique(array_filter($ids));
 
+        self::$items = User::query()->whereIn("id", $ids)->pluck("name", "id");
     }
 }

+ 1 - 0
app/Services/History/Detector/ProjectDetector.php

@@ -36,6 +36,7 @@ class ProjectDetector extends DetectorAbstract
     {
         return [
             "whitelist" => new WhitelistConverter(),
+            "acl" => new ModelEnumConverter("project.acl"),
             "status" => new ModelEnumConverter("project.status"),
         ];
     }

+ 1 - 3
config/custom-field.php

@@ -6,8 +6,6 @@ return [
      */
     'groups' => [
         'task',
-        '1',
-        '2',
-        '3',
+        'project',
     ]
 ];

+ 1 - 0
lang/en/fields.php

@@ -17,4 +17,5 @@ return [
     'asset_id' => 'Asset',
     'plan_id' => 'Plan',
     'reviewed_by' => 'Reviewed',
+    'whitelist' => 'Whitelist',
 ];

+ 6 - 1
lang/en/model-enums.php

@@ -2,6 +2,7 @@
 
 use \App\Models\Enums\ProjectStatus;
 use \App\Models\Enums\RequirementStatus;
+use \App\Models\Enums\ProjectACL;
 
 return [
     'project' => [
@@ -13,6 +14,10 @@ return [
             ProjectStatus::CLOSED->value => "D-Rejected",
             ProjectStatus::CANCEL->value => "Cancelled",
             ProjectStatus::PENDING_REVIEW->value => "Pending for Approval",
+        ],
+        'acl' => [
+            ProjectACL::PRIVATE->value => "Private",
+            ProjectACL::CUSTOM->value => "Custom",
         ]
     ],
     'requirement' => [
@@ -22,5 +27,5 @@ return [
             RequirementStatus::ACTIVE->value => "Active",
             RequirementStatus::CLOSED->value => "Closed",
         ]
-    ]
+    ],
 ];