diff --git a/app/admin/controller/v1/Role.php b/app/admin/controller/v1/Role.php index 2517d358..95a90351 100644 --- a/app/admin/controller/v1/Role.php +++ b/app/admin/controller/v1/Role.php @@ -74,7 +74,7 @@ class Role 'desc', // $[*].menu_id // $[*].permissions - 'menu_permission' + 'menu_permission' => '[]' ]); $post['menu_permission'] = json_decode($post['menu_permission'], true); @@ -90,19 +90,21 @@ class Role throw new InvalidOperateException('角色新增失败'); } - $permissions = []; - foreach ($post['menu_permission'] as $menu) { - $permissions[] = [ - 'role_id' => $role->id, - 'menu_id' => $menu['menu_id'], - 'permission' => array_reduce($menu['permissions'], function($v1, $v2) { - return $v1 | $v2; - }) - ]; - } - $authority = (new SysRoleAuthorityModel)->saveAll($permissions); - if ($authority->isEmpty()) { - throw new InvalidOperateException('角色权限新增失败'); + if (!empty($post['menu_permission'])) { + $permissions = []; + foreach ($post['menu_permission'] as $menu) { + $permissions[] = [ + 'role_id' => $role->id, + 'menu_id' => $menu['menu_id'], + 'permission' => array_reduce($menu['permissions']??[], function($v1, $v2) { + return $v1 | $v2; + }) + ]; + } + $authority = (new SysRoleAuthorityModel)->saveAll($permissions); + if ($authority->isEmpty()) { + throw new InvalidOperateException('角色权限新增失败'); + } } SysRoleModel::commit(); @@ -126,7 +128,7 @@ class Role 'desc', // $[*].menu_id // $[*].permissions - 'menu_permission' + 'menu_permission' => '[]' ]); $put['menu_permission'] = json_decode($put['menu_permission'], true); @@ -146,21 +148,23 @@ class Role throw new InvalidOperateException('角色更新失败'); } - $permissions = []; - foreach ($put['menu_permission'] as $menu) { - $permissions[] = [ - 'role_id' => $role->id, - 'menu_id' => $menu['menu_id'], - 'permission' => array_reduce($menu['permissions'], function($v1, $v2) { - return $v1 | $v2; - }) - ]; - } + if (!empty($put['menu_permission'])) { + $permissions = []; + foreach ($put['menu_permission'] as $menu) { + $permissions[] = [ + 'role_id' => $role->id, + 'menu_id' => $menu['menu_id'], + 'permission' => array_reduce($menu['permissions']??[], function($v1, $v2) { + return $v1 | $v2; + }) + ]; + } - SysRoleAuthorityModel::roleId($role->id)->delete(); - $authority = (new SysRoleAuthorityModel)->saveAll($permissions); - if ($authority->isEmpty()) { - throw new InvalidOperateException('角色权限更新失败'); + SysRoleAuthorityModel::roleId($role->id)->delete(); + $authority = (new SysRoleAuthorityModel)->saveAll($permissions); + if ($authority->isEmpty()) { + throw new InvalidOperateException('角色权限更新失败'); + } } SysRoleModel::commit(); diff --git a/app/admin/validate/v1/SysRoleValidate.php b/app/admin/validate/v1/SysRoleValidate.php index 3b4def68..93196e6e 100644 --- a/app/admin/validate/v1/SysRoleValidate.php +++ b/app/admin/validate/v1/SysRoleValidate.php @@ -18,7 +18,7 @@ class SysRoleValidate extends Validate 'pid' => 'integer', 'name' => 'max:64', 'desc' => 'max:255', - 'menu_permission.*.menu_id' => 'integer', + 'menu_permission.*.menu_id' => 'require|integer', 'menu_permission.*.permission' => 'array', ]; @@ -34,6 +34,7 @@ class SysRoleValidate extends Validate 'pid.integer' => '父级角色ID必须为整数', 'name.max' => '角色名称最多64个字符', 'desc.max' => '角色描述最多255个字符', + 'menu_permission.*.menu_id.require' => '菜单ID不能为空', 'menu_permission.*.menu_id.integer' => '菜单ID必须为整数', 'menu_permission.*.permission.array' => '权限必须为数组', ];