Browse Source

user menu permission

moell 9 months ago
parent
commit
550b32eeac

+ 30 - 0
app/Http/Controllers/API/UserController.php

@@ -10,6 +10,7 @@ use App\Http\Requests\API\User\UpdateRequest;
 use App\Http\Resources\API\UserInfoResource;
 use App\Http\Resources\API\UserSimpleResource;
 use App\Models\Enums\RequirementStatus;
+use App\Models\Menu;
 use App\Models\Role;
 use App\Models\User;
 use Illuminate\Http\Request;
@@ -24,6 +25,35 @@ class UserController extends Controller
     {
         $user = Auth::user();
 
+        $menus = Menu::query()->where("group", \request("group", "web"))
+            ->with(['permissions:name'])
+            ->get()
+            ->filter(fn(Menu $menu) => Auth::user()->can($menu->permission));
+
+        $items = [
+            'permissionList' => [],
+            'permissions' => [],
+        ];
+
+        foreach ($menus as $menu) {
+            $items['permissionList'][] = $menu->name;
+
+            $permissionItem = [
+                'actionList' => [],
+                'permissionId' => $menu->name,
+            ];
+
+            foreach ($menu->permissions as $permission) {
+               if (Auth::user()->can($permission->name)) {
+                   $permissionItem['actionList'][] = $permission->name;
+               }
+            }
+
+            $items['permissions'][] = $permissionItem;
+        }
+
+        $user->menus = $items;
+
         return new UserInfoResource($user);
     }
 

+ 1 - 0
app/Http/Resources/API/UserInfoResource.php

@@ -28,6 +28,7 @@ class UserInfoResource extends JsonResource
             'department' =>new SimpleDepartmentResource($this->department),
             'role' => new RoleResource($this->role),
             'status' =>$this->status,
+            'menus' => $this->menus ?: [],
         ];
     }
 }

+ 16 - 0
app/Models/Menu.php

@@ -0,0 +1,16 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+class Menu extends Model
+{
+    use HasFactory;
+
+    public function permissions()
+    {
+        return $this->belongsToMany(Permission::class);
+    }
+}

+ 11 - 0
app/Models/MenuPermission.php

@@ -0,0 +1,11 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+class MenuPermission extends Model
+{
+    use HasFactory;
+}

+ 34 - 0
database/migrations/2024_05_23_193324_create_menus_table.php

@@ -0,0 +1,34 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::create('menus', function (Blueprint $table) {
+            $table->id();
+            $table->string("name", 50);
+            $table->string("group")->default("web")->comment("web;api");
+            $table->integer("parent_id")->default(0);
+            $table->integer('order')->default(0);
+            $table->string('icon', 50)->nullable();
+            $table->string('uri')->nullable();
+            $table->string('permission')->nullable();
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::dropIfExists('menus');
+    }
+};

+ 27 - 0
database/migrations/2024_05_23_193948_create_menu_permission_table.php

@@ -0,0 +1,27 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::create('menu_permission', function (Blueprint $table) {
+            $table->integer("menu_id");
+            $table->integer("permission_id");
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::dropIfExists('menu_permission');
+    }
+};