From 317a9ef5951ca94ee55a79a24ce5f5104b0dfbb2 Mon Sep 17 00:00:00 2001 From: JaguarJack Date: Sun, 21 Jun 2020 21:07:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=A7=92=E8=89=B2=E6=9D=83?= =?UTF-8?q?=E9=99=90=E5=88=86=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- catch/permissions/controller/Role.php | 26 ++++++++++++++----- .../permissions/model/HasPermissionsTrait.php | 4 +-- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/catch/permissions/controller/Role.php b/catch/permissions/controller/Role.php index 5dc7dfc..65f7ace 100644 --- a/catch/permissions/controller/Role.php +++ b/catch/permissions/controller/Role.php @@ -71,17 +71,29 @@ class Role extends CatchController { $this->role->updateBy($id, $request->param()); $role = $this->role->findBy($id); - $role->detach(); - $permissions = $request->param('permissions'); - if (!empty($permissions)) { - $role->attach(array_unique($permissions)); + $hasPermissionIds = $role->getPermissions()->column('id'); + + $permissionIds = $request->param('permissions'); + + // 已存在权限 IDS + $existedPermissionIds = []; + foreach ($hasPermissionIds as $hasPermissionId) { + if (in_array($hasPermissionId, $permissionIds)) { + $existedPermissionIds[] = $hasPermissionId; + } } - if (!empty($request->param('departments'))) { - $role->detachDepartments(); - $role->attachDepartments($request->param('departments')); + $attachIds = array_diff($permissionIds, $existedPermissionIds); + $detachIds = array_diff($hasPermissionIds, $existedPermissionIds); + + if (!empty($detachIds)) { + $role->detach($detachIds); } + if (!empty($attachIds)) { + $role->attach(array_unique($attachIds)); + } + return CatchResponse::success(); } diff --git a/catch/permissions/model/HasPermissionsTrait.php b/catch/permissions/model/HasPermissionsTrait.php index 64b95ce..01158b4 100644 --- a/catch/permissions/model/HasPermissionsTrait.php +++ b/catch/permissions/model/HasPermissionsTrait.php @@ -51,7 +51,7 @@ trait HasPermissionsTrait public function attach(array $permissions) { if (empty($permissions)) { - return true; + return true; } sort($permissions); @@ -68,7 +68,7 @@ trait HasPermissionsTrait public function detach(array $roles = []) { if (empty($roles)) { - return $this->permissions()->detach(); + return $this->permissions()->detach(); } return $this->permissions()->detach($roles);