refactor: 修改角色校验及新增/更新

This commit is contained in:
2025-02-27 18:05:49 +08:00
parent eb3ca0b501
commit 27935b529f
2 changed files with 35 additions and 30 deletions

View File

@@ -74,7 +74,7 @@ class Role
'desc', 'desc',
// $[*].menu_id // $[*].menu_id
// $[*].permissions // $[*].permissions
'menu_permission' 'menu_permission' => '[]'
]); ]);
$post['menu_permission'] = json_decode($post['menu_permission'], true); $post['menu_permission'] = json_decode($post['menu_permission'], true);
@@ -90,19 +90,21 @@ class Role
throw new InvalidOperateException('角色新增失败'); throw new InvalidOperateException('角色新增失败');
} }
$permissions = []; if (!empty($post['menu_permission'])) {
foreach ($post['menu_permission'] as $menu) { $permissions = [];
$permissions[] = [ foreach ($post['menu_permission'] as $menu) {
'role_id' => $role->id, $permissions[] = [
'menu_id' => $menu['menu_id'], 'role_id' => $role->id,
'permission' => array_reduce($menu['permissions'], function($v1, $v2) { 'menu_id' => $menu['menu_id'],
return $v1 | $v2; 'permission' => array_reduce($menu['permissions']??[], function($v1, $v2) {
}) return $v1 | $v2;
]; })
} ];
$authority = (new SysRoleAuthorityModel)->saveAll($permissions); }
if ($authority->isEmpty()) { $authority = (new SysRoleAuthorityModel)->saveAll($permissions);
throw new InvalidOperateException('角色权限新增失败'); if ($authority->isEmpty()) {
throw new InvalidOperateException('角色权限新增失败');
}
} }
SysRoleModel::commit(); SysRoleModel::commit();
@@ -126,7 +128,7 @@ class Role
'desc', 'desc',
// $[*].menu_id // $[*].menu_id
// $[*].permissions // $[*].permissions
'menu_permission' 'menu_permission' => '[]'
]); ]);
$put['menu_permission'] = json_decode($put['menu_permission'], true); $put['menu_permission'] = json_decode($put['menu_permission'], true);
@@ -146,21 +148,23 @@ class Role
throw new InvalidOperateException('角色更新失败'); throw new InvalidOperateException('角色更新失败');
} }
$permissions = []; if (!empty($put['menu_permission'])) {
foreach ($put['menu_permission'] as $menu) { $permissions = [];
$permissions[] = [ foreach ($put['menu_permission'] as $menu) {
'role_id' => $role->id, $permissions[] = [
'menu_id' => $menu['menu_id'], 'role_id' => $role->id,
'permission' => array_reduce($menu['permissions'], function($v1, $v2) { 'menu_id' => $menu['menu_id'],
return $v1 | $v2; 'permission' => array_reduce($menu['permissions']??[], function($v1, $v2) {
}) return $v1 | $v2;
]; })
} ];
}
SysRoleAuthorityModel::roleId($role->id)->delete(); SysRoleAuthorityModel::roleId($role->id)->delete();
$authority = (new SysRoleAuthorityModel)->saveAll($permissions); $authority = (new SysRoleAuthorityModel)->saveAll($permissions);
if ($authority->isEmpty()) { if ($authority->isEmpty()) {
throw new InvalidOperateException('角色权限更新失败'); throw new InvalidOperateException('角色权限更新失败');
}
} }
SysRoleModel::commit(); SysRoleModel::commit();

View File

@@ -18,7 +18,7 @@ class SysRoleValidate extends Validate
'pid' => 'integer', 'pid' => 'integer',
'name' => 'max:64', 'name' => 'max:64',
'desc' => 'max:255', 'desc' => 'max:255',
'menu_permission.*.menu_id' => 'integer', 'menu_permission.*.menu_id' => 'require|integer',
'menu_permission.*.permission' => 'array', 'menu_permission.*.permission' => 'array',
]; ];
@@ -34,6 +34,7 @@ class SysRoleValidate extends Validate
'pid.integer' => '父级角色ID必须为整数', 'pid.integer' => '父级角色ID必须为整数',
'name.max' => '角色名称最多64个字符', 'name.max' => '角色名称最多64个字符',
'desc.max' => '角色描述最多255个字符', 'desc.max' => '角色描述最多255个字符',
'menu_permission.*.menu_id.require' => '菜单ID不能为空',
'menu_permission.*.menu_id.integer' => '菜单ID必须为整数', 'menu_permission.*.menu_id.integer' => '菜单ID必须为整数',
'menu_permission.*.permission.array' => '权限必须为数组', 'menu_permission.*.permission.array' => '权限必须为数组',
]; ];