Browse Source

角色菜单权限调整,找已拥有和未拥有的菜单权限做处理

kely 9 months ago
parent
commit
598feb7832
1 changed files with 25 additions and 6 deletions
  1. 25 6
      app/Http/Controllers/API/RoleController.php

+ 25 - 6
app/Http/Controllers/API/RoleController.php

@@ -115,13 +115,32 @@ class RoleController extends Controller
     {
         $role = Role::query()->findOrFail($id);
 
+        //获取菜单所有权限
+        $menusPermission=Menu::query()->where("group", \request("group", "web"))->pluck('permission')->toArray();
+
+        //通过获取用户拥有的菜单权限
+        $roleMenusPermissions=$role->permissions->filter(function ($permission) use ($menusPermission) {
+                return in_array($permission->name, $menusPermission);
+            })->pluck('name')->toArray();
+
+
         $permissions=$request->input('permissions');
-        foreach ($permissions as $permission){
-            if($role->hasPermissionTo($permission)){
-                $role->revokePermissionTo($permission);
-            }else{
-                $role->givePermissionTo($permission);
-            };
+
+        // 找出需要新增的权限
+        $extraPermissions = array_diff($permissions, $roleMenusPermissions);
+
+        if(!empty($extraPermissions)&&count($extraPermissions)!=0){
+            foreach ($extraPermissions as $extraPermission){
+                $role->givePermissionTo($extraPermission);
+            }
+        }
+
+        // 找出需要剔除的权限
+        $missingPermissions = array_diff($roleMenusPermissions, $permissions);
+        if(!empty($missingPermissions)&&count($missingPermissions)!=0){
+            foreach ($missingPermissions as $missingPermission){
+                $role->revokePermissionTo($missingPermission);
+            }
         }
 
         return $this->noContent();