Преглед изворни кода

Merge branch 'update-permission-check' into dev

kely пре 9 месеци
родитељ
комит
4c56af013a
2 измењених фајлова са 57 додато и 1 уклоњено
  1. 32 1
      app/Http/Middleware/CheckPermission.php
  2. 25 0
      app/Models/Enums/PermissionType.php

+ 32 - 1
app/Http/Middleware/CheckPermission.php

@@ -8,11 +8,12 @@ use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Route;
 use Spatie\Permission\Exceptions\UnauthorizedException;
 use Symfony\Component\HttpFoundation\Response;
+use App\Models\Enums\PermissionType;
 
 class CheckPermission
 {
     /**
-     * Handle an incoming request.
+     * Handle an incoming request.`
      *
      * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
      */
@@ -20,10 +21,40 @@ class CheckPermission
     {
         $permission = Route::currentRouteName();
 
+        $permission=$this->RouteGetType($request,$permission);
+
         if (Auth::user()->hasPermissionTo($permission)) {
             return $next($request);
         }
 
         throw UnauthorizedException::forPermissions([$permission]);
     }
+
+    public function RouteGetType(Request $request,string $permission){
+        switch ($permission) {
+            case 'config.index':
+                $group = $request->get("group", []);
+                foreach ($group as $item){
+                    $permission=$this->findPermission($item);
+                }
+                return $permission;
+                break;
+            case 'config.setting':
+                $group = $request->json()->all();
+                if(!empty($group) && is_array($group) && isset($group[0]['group'])){
+                    $permission=$this->findPermission($group[0]['group']);
+                }
+                return $permission;
+                break;
+            default:
+                return $permission;
+        }
+
+    }
+
+    public function findPermission(string $type){
+        $objectType=PermissionType::tryFrom($type);
+        $permissionType=$objectType->getPermissionType();
+        return $permissionType;
+    }
 }

+ 25 - 0
app/Models/Enums/PermissionType.php

@@ -0,0 +1,25 @@
+<?php
+/**
+ * Created by IntelliJ IDEA.
+ * User: kelyliang
+ * Date: 2024/5/29
+ * Time: 上午 09:50
+ */
+
+namespace App\Models\Enums;
+
+
+enum PermissionType :string
+{
+    case EMAIL = "email";
+
+    case BROWSER ="browser";
+
+    public function getPermissionType(): string
+{
+        return match ($this) {
+            self::EMAIL => 'config-email',
+            self::BROWSER => 'config-browser'
+        };
+    }
+}