feat(系统设置): 用户管理增加启用禁用的接口

This commit is contained in:
song-tianyang 2023-06-20 11:27:04 +08:00 committed by 刘瑞斌
parent a55fbacfe0
commit 84b6e88a99
17 changed files with 477 additions and 426 deletions

View File

@ -0,0 +1,5 @@
package io.metersphere.sdk.constants;
public enum UserSourceEnum {
LOCAL, OIDC, CAS, OAUTH2
}

View File

@ -22,4 +22,6 @@ public interface BaseUserMapper {
List<User> selectUserIdByEmailList(@Param("emailList") List<String> emailList); List<User> selectUserIdByEmailList(@Param("emailList") List<String> emailList);
List<User> selectByKeyword(String keyword); List<User> selectByKeyword(String keyword);
List<String> selectUserIdByIdList(@Param("idList") List<String> userIdList);
} }

View File

@ -60,4 +60,10 @@
OR email LIKE CONCAT('%', #{keyword}, '%') OR email LIKE CONCAT('%', #{keyword}, '%')
</if> </if>
</select> </select>
<select id="selectUserIdByIdList" resultType="java.lang.String">
SELECT * from `user` WHERE id IN
<foreach collection="idList" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
</mapper> </mapper>

View File

@ -1,6 +1,8 @@
role.not.global.system=Role is not global system role role.not.global.system=Role is not global system role
role.not.contains.member=Role not contains member role.not.contains.member=Role not contains member
user.not.login=User not login user.not.login=User not login
user.not.exist=User not exist
user.not.empty=User can not empty
auth_source.id.not_blank=Auth source id must not be blank auth_source.id.not_blank=Auth source id must not be blank
auth_source.status.length_range=Auth source status must be between {min} and {max} characters long auth_source.status.length_range=Auth source status must be between {min} and {max} characters long
auth_source.status.not_blank=Auth source status must not be blank auth_source.status.not_blank=Auth source status must not be blank

View File

@ -1,150 +1,151 @@
role.not.global.system=\u89D2\u8272\u4E0D\u662F\u5168\u5C40\u7CFB\u7EDF\u89D2\u8272 role.not.global.system=角色不是全局系统角色
role.not.contains.member=\u89D2\u8272\u4E0D\u5305\u542B\u7CFB\u7EDF\u6210\u5458\u89D2\u8272 role.not.contains.member=角色不包含系统成员角色
user.not.login=\u672A\u83B7\u53D6\u5230\u767B\u5F55\u7528\u6237 user.not.login=未获取到登录用户
auth_source.id.not_blank=\u8BA4\u8BC1\u6E90ID\u4E0D\u80FD\u4E3A\u7A7A user.not.empty=用户不呢为空
auth_source.status.length_range=\u8BA4\u8BC1\u6E90\u72B6\u6001\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 user.not.exist=用户不存在
auth_source.status.not_blank=\u8BA4\u8BC1\u6E90\u72B6\u6001\u4E0D\u80FD\u4E3A\u7A7A auth_source.id.not_blank=认证源ID不能为空
license.id.not_blank=License ID\u4E0D\u80FD\u4E3A\u7A7A auth_source.status.length_range=认证源状态长度必须在{min}和{max}之间
message_task.id.not_blank=\u6D88\u606F\u901A\u77E5\u4EFB\u52A1ID\u4E0D\u80FD\u4E3A\u7A7A auth_source.status.not_blank=认证源状态不能为空
message_task.type.not_blank=\u6D88\u606F\u901A\u77E5\u4EFB\u52A1\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A license.id.not_blank=License ID不能为空
message_task.type.length_range=\u6D88\u606F\u901A\u77E5\u4EFB\u52A1\u7C7B\u578B\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 message_task.id.not_blank=消息通知任务ID不能为空
message_task.event.not_blank=\u6D88\u606F\u901A\u77E5\u4EFB\u52A1\u4E8B\u4EF6\u4E0D\u80FD\u4E3A\u7A7A message_task.type.not_blank=消息通知任务类型不能为空
message_task.event.length_range=\u6D88\u606F\u901A\u77E5\u4EFB\u52A1\u4E8B\u4EF6\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 message_task.type.length_range=消息通知任务类型长度必须在{min}和{max}之间
message_task.receiver.not_blank=\u6D88\u606F\u901A\u77E5\u4EFB\u52A1\u63A5\u6536\u8005\u4E0D\u80FD\u4E3A\u7A7A message_task.event.not_blank=消息通知任务事件不能为空
message_task.receiver.length_range=\u6D88\u606F\u901A\u77E5\u4EFB\u52A1\u63A5\u6536\u8005\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 message_task.event.length_range=消息通知任务事件长度必须在{min}和{max}之间
message_task.task_type.not_blank=\u6D88\u606F\u901A\u77E5\u4EFB\u52A1\u4EFB\u52A1\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A message_task.receiver.not_blank=消息通知任务接收者不能为空
message_task.task_type.length_range=\u6D88\u606F\u901A\u77E5\u4EFB\u52A1\u4EFB\u52A1\u7C7B\u578B\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 message_task.receiver.length_range=消息通知任务接收者长度必须在{min}和{max}之间
message_task.test_id.not_blank=\u6D88\u606F\u901A\u77E5\u4EFB\u52A1\u6D4B\u8BD5ID\u4E0D\u80FD\u4E3A\u7A7A message_task.task_type.not_blank=消息通知任务任务类型不能为空
message_task.test_id.length_range=\u6D88\u606F\u901A\u77E5\u4EFB\u52A1\u6D4B\u8BD5ID\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 message_task.task_type.length_range=消息通知任务任务类型长度必须在{min}和{max}之间
message_task.project_id.not_blank=\u6D88\u606F\u901A\u77E5\u4EFB\u52A1\u9879\u76EEID\u4E0D\u80FD\u4E3A\u7A7A message_task.test_id.not_blank=消息通知任务测试ID不能为空
message_task.project_id.length_range=\u6D88\u606F\u901A\u77E5\u4EFB\u52A1\u9879\u76EEID\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 message_task.test_id.length_range=消息通知任务测试ID长度必须在{min}和{max}之间
message_task_blob.id.not_blank=\u6D88\u606F\u901A\u77E5\u4EFB\u52A1ID\u4E0D\u80FD\u4E3A\u7A7A message_task.project_id.not_blank=消息通知任务项目ID不能为空
notification.id.not_blank=\u6D88\u606F\u901A\u77E5ID\u4E0D\u80FD\u4E3A\u7A7A message_task.project_id.length_range=消息通知任务项目ID长度必须在{min}和{max}之间
notification.type.not_blank=\u6D88\u606F\u901A\u77E5\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A message_task_blob.id.not_blank=消息通知任务ID不能为空
notification.type.length_range=\u6D88\u606F\u901A\u77E5\u7C7B\u578B\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 notification.id.not_blank=消息通知ID不能为空
notification.receiver.not_blank=\u6D88\u606F\u901A\u77E5\u63A5\u6536\u8005\u4E0D\u80FD\u4E3A\u7A7A notification.type.not_blank=消息通知类型不能为空
notification.receiver.length_range=\u6D88\u606F\u901A\u77E5\u63A5\u6536\u8005\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 notification.type.length_range=消息通知类型长度必须在{min}和{max}之间
notification.title.not_blank=\u6D88\u606F\u901A\u77E5\u6807\u9898\u4E0D\u80FD\u4E3A\u7A7A notification.receiver.not_blank=消息通知接收者不能为空
notification.title.length_range=\u6D88\u606F\u901A\u77E5\u6807\u9898\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 notification.receiver.length_range=消息通知接收者长度必须在{min}和{max}之间
notification.status.not_blank=\u6D88\u606F\u901A\u77E5\u72B6\u6001\u4E0D\u80FD\u4E3A\u7A7A notification.title.not_blank=消息通知标题不能为空
notification.status.length_range=\u6D88\u606F\u901A\u77E5\u72B6\u6001\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 notification.title.length_range=消息通知标题长度必须在{min}和{max}之间
notification.operator.not_blank=\u6D88\u606F\u901A\u77E5\u64CD\u4F5C\u8005\u4E0D\u80FD\u4E3A\u7A7A notification.status.not_blank=消息通知状态不能为空
notification.operator.length_range=\u6D88\u606F\u901A\u77E5\u64CD\u4F5C\u8005\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 notification.status.length_range=消息通知状态长度必须在{min}和{max}之间
notification.operation.not_blank=\u6D88\u606F\u901A\u77E5\u64CD\u4F5C\u4E0D\u80FD\u4E3A\u7A7A notification.operator.not_blank=消息通知操作者不能为空
notification.operation.length_range=\u6D88\u606F\u901A\u77E5\u64CD\u4F5C\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 notification.operator.length_range=消息通知操作者长度必须在{min}和{max}之间
notification.resource_id.not_blank=\u6D88\u606F\u901A\u77E5\u8D44\u6E90ID\u4E0D\u80FD\u4E3A\u7A7A notification.operation.not_blank=消息通知操作不能为空
notification.resource_id.length_range=\u6D88\u606F\u901A\u77E5\u8D44\u6E90ID\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 notification.operation.length_range=消息通知操作长度必须在{min}和{max}之间
notification.resource_type.not_blank=\u6D88\u606F\u901A\u77E5\u8D44\u6E90\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A notification.resource_id.not_blank=消息通知资源ID不能为空
notification.resource_type.length_range=\u6D88\u606F\u901A\u77E5\u8D44\u6E90\u7C7B\u578B\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 notification.resource_id.length_range=消息通知资源ID长度必须在{min}和{max}之间
notification.resource_name.not_blank=\u6D88\u606F\u901A\u77E5\u8D44\u6E90\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A notification.resource_type.not_blank=消息通知资源类型不能为空
notification.resource_name.length_range=\u6D88\u606F\u901A\u77E5\u8D44\u6E90\u540D\u79F0\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 notification.resource_type.length_range=消息通知资源类型长度必须在{min}和{max}之间
novice_statistics.id.not_blank=\u65B0\u624B\u6751ID\u4E0D\u80FD\u4E3A\u7A7A notification.resource_name.not_blank=消息通知资源名称不能为空
novice_statistics.guide_step.not_blank=\u65B0\u624B\u6751\u6B65\u9AA4\u4E0D\u80FD\u4E3A\u7A7A notification.resource_name.length_range=消息通知资源名称长度必须在{min}和{max}之间
novice_statistics.guide_step.length_range=\u65B0\u624B\u6751\u6B65\u9AA4\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 novice_statistics.id.not_blank=新手村ID不能为空
operating_log.id.not_blank=\u64CD\u4F5C\u65E5\u5FD7ID\u4E0D\u80FD\u4E3A\u7A7A novice_statistics.guide_step.not_blank=新手村步骤不能为空
operating_log.project_id.not_blank=\u64CD\u4F5C\u65E5\u5FD7\u9879\u76EEID\u4E0D\u80FD\u4E3A\u7A7A novice_statistics.guide_step.length_range=新手村步骤长度必须在{min}和{max}之间
operating_log.project_id.length_range=\u64CD\u4F5C\u65E5\u5FD7\u9879\u76EEID\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 operating_log.id.not_blank=操作日志ID不能为空
operating_log_resource.id.not_blank=\u64CD\u4F5C\u65E5\u5FD7\u8D44\u6E90ID\u4E0D\u80FD\u4E3A\u7A7A operating_log.project_id.not_blank=操作日志项目ID不能为空
operating_log_resource.operating_log_id.not_blank=\u64CD\u4F5C\u65E5\u5FD7\u8D44\u6E90\u64CD\u4F5C\u65E5\u5FD7ID\u4E0D\u80FD\u4E3A\u7A7A operating_log.project_id.length_range=操作日志项目ID长度必须在{min}和{max}之间
operating_log_resource.operating_log_id.length_range=\u64CD\u4F5C\u65E5\u5FD7\u8D44\u6E90\u64CD\u4F5C\u65E5\u5FD7ID\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 operating_log_resource.id.not_blank=操作日志资源ID不能为空
operating_log_resource.source_id.not_blank=\u64CD\u4F5C\u65E5\u5FD7\u8D44\u6E90\u6765\u6E90ID\u4E0D\u80FD\u4E3A\u7A7A operating_log_resource.operating_log_id.not_blank=操作日志资源操作日志ID不能为空
operating_log_resource.source_id.length_range=\u64CD\u4F5C\u65E5\u5FD7\u8D44\u6E90\u6765\u6E90ID\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 operating_log_resource.operating_log_id.length_range=操作日志资源操作日志ID长度必须在{min}和{max}之间
plugin.id.not_blank=\u63D2\u4EF6\u4E3B\u952E\u4E0D\u80FD\u4E3A\u7A7A operating_log_resource.source_id.not_blank=操作日志资源来源ID不能为空
plugin.plugin_id.not_blank=\u63D2\u4EF6ID\u4E0D\u80FD\u4E3A\u7A7A operating_log_resource.source_id.length_range=操作日志资源来源ID长度必须在{min}和{max}之间
plugin.plugin_id.length_range=\u63D2\u4EF6ID\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 plugin.id.not_blank=插件主键不能为空
plugin.script_id.not_blank=\u63D2\u4EF6\u811A\u672CID\u4E0D\u80FD\u4E3A\u7A7A plugin.plugin_id.not_blank=插件ID不能为空
plugin.script_id.length_range=\u63D2\u4EF6\u811A\u672CID\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 plugin.plugin_id.length_range=插件ID长度必须在{min}和{max}之间
plugin.clazz_name.not_blank=\u63D2\u4EF6\u7C7B\u540D\u4E0D\u80FD\u4E3A\u7A7A plugin.script_id.not_blank=插件脚本ID不能为空
plugin.clazz_name.length_range=\u63D2\u4EF6\u7C7B\u540D\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 plugin.script_id.length_range=插件脚本ID长度必须在{min}和{max}之间
plugin.jmeter_clazz.not_blank=\u63D2\u4EF6jmeter\u7C7B\u540D\u4E0D\u80FD\u4E3A\u7A7A plugin.clazz_name.not_blank=插件类名不能为空
plugin.jmeter_clazz.length_range=\u63D2\u4EF6jmeter\u7C7B\u540D\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 plugin.clazz_name.length_range=插件类名长度必须在{min}和{max}之间
plugin.source_path.not_blank=\u63D2\u4EF6\u6E90\u8DEF\u5F84\u4E0D\u80FD\u4E3A\u7A7A plugin.jmeter_clazz.not_blank=插件jmeter类名不能为空
plugin.source_path.length_range=\u63D2\u4EF6\u6E90\u8DEF\u5F84\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 plugin.jmeter_clazz.length_range=插件jmeter类名长度必须在{min}和{max}之间
plugin.source_name.not_blank=\u63D2\u4EF6\u6E90\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A plugin.source_path.not_blank=插件源路径不能为空
plugin.source_name.length_range=\u63D2\u4EF6\u6E90\u540D\u79F0\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 plugin.source_path.length_range=插件源路径长度必须在{min}和{max}之间
plugin.scenario.not_blank=\u63D2\u4EF6\u573A\u666F\u4E0D\u80FD\u4E3A\u7A7A plugin.source_name.not_blank=插件源名称不能为空
plugin.scenario.length_range=\u63D2\u4EF6\u573A\u666F\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 plugin.source_name.length_range=插件源名称长度必须在{min}和{max}之间
plugin_blob.id.not_blank=\u63D2\u4EF6ID\u4E0D\u80FD\u4E3A\u7A7A plugin.scenario.not_blank=插件场景不能为空
quota.id.not_blank=\u914D\u989DID\u4E0D\u80FD\u4E3A\u7A7A plugin.scenario.length_range=插件场景长度必须在{min}和{max}之间
schedule.id.not_blank=\u5B9A\u65F6\u4EFB\u52A1ID\u4E0D\u80FD\u4E3A\u7A7A plugin_blob.id.not_blank=插件ID不能为空
schedule.type.not_blank=\u5B9A\u65F6\u4EFB\u52A1\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A quota.id.not_blank=配额ID不能为空
schedule.type.length_range=\u5B9A\u65F6\u4EFB\u52A1\u7C7B\u578B\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 schedule.id.not_blank=定时任务ID不能为空
schedule.value.not_blank=\u5B9A\u65F6\u4EFB\u52A1\u503C\u4E0D\u80FD\u4E3A\u7A7A schedule.type.not_blank=定时任务类型不能为空
schedule.value.length_range=\u5B9A\u65F6\u4EFB\u52A1\u503C\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 schedule.type.length_range=定时任务类型长度必须在{min}和{max}之间
schedule.job.not_blank=\u5B9A\u65F6\u4EFB\u52A1\u4E0D\u80FD\u4E3A\u7A7A schedule.value.not_blank=定时任务值不能为空
schedule.job.length_range=\u5B9A\u65F6\u4EFB\u52A1\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 schedule.value.length_range=定时任务值长度必须在{min}和{max}之间
schedule.create_user.not_blank=\u5B9A\u65F6\u4EFB\u52A1\u521B\u5EFA\u4EBA\u4E0D\u80FD\u4E3A\u7A7A schedule.job.not_blank=定时任务不能为空
schedule.create_user.length_range=\u5B9A\u65F6\u4EFB\u52A1\u521B\u5EFA\u4EBA\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 schedule.job.length_range=定时任务长度必须在{min}和{max}之间
service_integration.id.not_blank=\u670D\u52A1\u96C6\u6210ID\u4E0D\u80FD\u4E3A\u7A7A schedule.create_user.not_blank=定时任务创建人不能为空
service_integration.platform.not_blank=\u670D\u52A1\u96C6\u6210\u5E73\u53F0\u4E0D\u80FD\u4E3A\u7A7A schedule.create_user.length_range=定时任务创建人长度必须在{min}和{max}之间
service_integration.platform.length_range=\u670D\u52A1\u96C6\u6210\u5E73\u53F0\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 service_integration.id.not_blank=服务集成ID不能为空
system_parameter.param_key.not_blank=\u7CFB\u7EDF\u53C2\u6570Key\u4E0D\u80FD\u4E3A\u7A7A service_integration.platform.not_blank=服务集成平台不能为空
system_parameter.type.not_blank=\u7CFB\u7EDF\u53C2\u6570\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A service_integration.platform.length_range=服务集成平台长度必须在{min}和{max}之间
system_parameter.type.length_range=\u7CFB\u7EDF\u53C2\u6570\u7C7B\u578B\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 system_parameter.param_key.not_blank=系统参数Key不能为空
test_resource.id.not_blank=\u8D44\u6E90\u6C60\u8282\u70B9ID\u4E0D\u80FD\u4E3A\u7A7A system_parameter.type.not_blank=系统参数类型不能为空
test_resource.test_resource_pool_id.not_blank=\u8D44\u6E90\u6C60ID\u4E0D\u80FD\u4E3A\u7A7A system_parameter.type.length_range=系统参数类型长度必须在{min}和{max}之间
test_resource.test_resource_pool_id.length_range=\u8D44\u6E90\u6C60ID\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 test_resource.id.not_blank=资源池节点ID不能为空
test_resource.status.not_blank=\u8D44\u6E90\u6C60\u8282\u70B9\u72B6\u6001\u4E0D\u80FD\u4E3A\u7A7A test_resource.test_resource_pool_id.not_blank=资源池ID不能为空
test_resource.status.length_range=\u8D44\u6E90\u6C60\u8282\u70B9\u72B6\u6001\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 test_resource.test_resource_pool_id.length_range=资源池ID长度必须在{min}和{max}之间
test_resource_pool.id.not_blank=\u8D44\u6E90\u6C60ID\u4E0D\u80FD\u4E3A\u7A7A test_resource.status.not_blank=资源池节点状态不能为空
test_resource_pool.name.not_blank=\u8D44\u6E90\u6C60\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A test_resource.status.length_range=资源池节点状态长度必须在{min}和{max}之间
test_resource_pool.name.length_range=\u8D44\u6E90\u6C60\u540D\u79F0\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 test_resource_pool.id.not_blank=资源池ID不能为空
test_resource_pool.type.not_blank=\u8D44\u6E90\u6C60\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A test_resource_pool.name.not_blank=资源池名称不能为空
test_resource_pool.type.length_range=\u8D44\u6E90\u6C60\u7C7B\u578B\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 test_resource_pool.name.length_range=资源池名称长度必须在{min}和{max}之间
test_resource_pool.status.not_blank=\u8D44\u6E90\u6C60\u72B6\u6001\u4E0D\u80FD\u4E3A\u7A7A test_resource_pool.type.not_blank=资源池类型不能为空
test_resource_pool.status.length_range=\u8D44\u6E90\u6C60\u72B6\u6001\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 test_resource_pool.type.length_range=资源池类型长度必须在{min}和{max}之间
user.id.not_blank=\u7528\u6237ID\u4E0D\u80FD\u4E3A\u7A7A test_resource_pool.status.not_blank=资源池状态不能为空
user.name.not_blank=\u7528\u6237\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A test_resource_pool.status.length_range=资源池状态长度必须在{min}和{max}之间
user.name.length_range=\u7528\u6237\u540D\u79F0\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 user.id.not_blank=用户ID不能为空
user.email.not_blank=\u7528\u6237email\u4E0D\u80FD\u4E3A\u7A7A user.name.not_blank=用户名称不能为空
user.email.length_range=\u7528\u6237email\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 user.name.length_range=用户名称长度必须在{min}和{max}之间
user.email.repeat=\u7528\u6237email\u5DF2\u5B58\u5728 user.email.not_blank=用户email不能为空
user.email.invalid=\u7528\u6237email\u683C\u5F0F\u4E0D\u6B63\u786E user.email.length_range=用户email长度必须在{min}和{max}之间
user.status.not_blank=\u7528\u6237\u72B6\u6001\u4E0D\u80FD\u4E3A\u7A7A user.email.repeat=用户email已存在
user.status.length_range=\u7528\u6237\u72B6\u6001\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 user.email.invalid=用户email格式不正确
user.source.not_blank=\u7528\u6237\u6765\u6E90\u4E0D\u80FD\u4E3A\u7A7A user.status.not_blank=用户状态不能为空
user.source.length_range=\u7528\u6237\u6765\u6E90\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 user.status.length_range=用户状态长度必须在{min}和{max}之间
user.create_user.not_blank=\u7528\u6237\u521B\u5EFA\u4EBA\u4E0D\u80FD\u4E3A\u7A7A user.source.not_blank=用户来源不能为空
user.create_user.length_range=\u7528\u6237\u521B\u5EFA\u4EBA\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 user.source.length_range=用户来源长度必须在{min}和{max}之间
user_extend.id.not_blank=\u7528\u6237ID\u4E0D\u80FD\u4E3A\u7A7A user.create_user.not_blank=用户创建人不能为空
user_key.id.not_blank=\u7528\u6237ApiKey ID\u4E0D\u80FD\u4E3A\u7A7A user.create_user.length_range=用户创建人长度必须在{min}和{max}之间
user_key.create_user.not_blank=\u7528\u6237ApiKey\u521B\u5EFA\u4EBA\u4E0D\u80FD\u4E3A\u7A7A user_extend.id.not_blank=用户ID不能为空
user_key.create_user.length_range=\u7528\u6237ApiKey\u521B\u5EFA\u4EBA\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 user_key.id.not_blank=用户ApiKey ID不能为空
user_key.access_key.not_blank=\u7528\u6237ApiKey access key\u4E0D\u80FD\u4E3A\u7A7A user_key.create_user.not_blank=用户ApiKey创建人不能为空
user_key.access_key.length_range=\u7528\u6237ApiKey access key\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 user_key.create_user.length_range=用户ApiKey创建人长度必须在{min}和{max}之间
user_key.secret_key.not_blank=\u7528\u6237ApiKey secret key\u4E0D\u80FD\u4E3A\u7A7A user_key.access_key.not_blank=用户ApiKey access key不能为空
user_key.secret_key.length_range=\u7528\u6237ApiKey secret key\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 user_key.access_key.length_range=用户ApiKey access key长度必须在{min}和{max}之间
user.info.not_empty=\u7528\u6237\u4FE1\u606F\u4E0D\u80FD\u4E3A\u7A7A user_key.secret_key.not_blank=用户ApiKey secret key不能为空
user.organizationId.not_blank=\u7528\u6237\u7EC4\u7EC7\u4E0D\u80FD\u4E3A\u7A7A user_key.secret_key.length_range=用户ApiKey secret key长度必须在{min}和{max}之间
user.projectId.not_blank=\u7528\u6237\u9879\u76EE\u4E0D\u80FD\u4E3A\u7A7A user.info.not_empty=用户信息不能为空
user_role.id.not_blank=\u7528\u6237\u7EC4ID\u4E0D\u80FD\u4E3A\u7A7A user.organizationId.not_blank=用户组织不能为空
user_role.name.not_blank=\u7528\u6237\u7EC4\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A user.projectId.not_blank=用户项目不能为空
user_role.name.length_range=\u7528\u6237\u7EC4\u540D\u79F0\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 user_role.id.not_blank=用户组ID不能为空
user_role.system.not_blank=\u662F\u5426\u662F\u7CFB\u7EDF\u7528\u6237\u7EC4\u4E0D\u80FD\u4E3A\u7A7A user_role.name.not_blank=用户组名称不能为空
user_role.system.length_range=\u662F\u5426\u662F\u7CFB\u7EDF\u7528\u6237\u7EC4\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 user_role.name.length_range=用户组名称长度必须在{min}和{max}之间
user_role.type.not_blank=\u7528\u6237\u7EC4\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A user_role.system.not_blank=是否是系统用户组不能为空
user_role.type.length_range=\u7528\u6237\u7EC4\u7C7B\u578B\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 user_role.system.length_range=是否是系统用户组长度必须在{min}和{max}之间
user_role.create_user.not_blank=\u7528\u6237\u7EC4\u521B\u5EFA\u4EBA\u4E0D\u80FD\u4E3A\u7A7A user_role.type.not_blank=用户组类型不能为空
user_role.create_user.length_range=\u7528\u6237\u7EC4\u521B\u5EFA\u4EBA\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 user_role.type.length_range=用户组类型长度必须在{min}和{max}之间
user_role.scope_id.not_blank=\u7528\u6237\u7EC4\u5E94\u7528\u8303\u56F4\u4E0D\u80FD\u4E3A\u7A7A user_role.create_user.not_blank=用户组创建人不能为空
user_role.scope_id.length_range=\u7528\u6237\u7EC4\u5E94\u7528\u8303\u56F4\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 user_role.create_user.length_range=用户组创建人长度必须在{min}和{max}之间
user_role_permission.id.not_blank=\u7528\u6237\u7EC4\u6743\u9650ID\u4E0D\u80FD\u4E3A\u7A7A user_role.scope_id.not_blank=用户组应用范围不能为空
user_role_permission.role_id.not_blank=\u7528\u6237\u7EC4\u6743\u9650\u7528\u6237\u7EC4ID\u4E0D\u80FD\u4E3A\u7A7A user_role.scope_id.length_range=用户组应用范围长度必须在{min}和{max}之间
user_role_permission.role_id.length_range=\u7528\u6237\u7EC4\u6743\u9650\u7528\u6237\u7EC4ID\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 user_role_permission.id.not_blank=用户组权限ID不能为空
user_role_permission.permission_id.not_blank=\u7528\u6237\u7EC4\u6743\u9650\u6743\u9650ID\u4E0D\u80FD\u4E3A\u7A7A user_role_permission.role_id.not_blank=用户组权限用户组ID不能为空
user_role_permission.permission_id.length_range=\u7528\u6237\u7EC4\u6743\u9650\u6743\u9650ID\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 user_role_permission.role_id.length_range=用户组权限用户组ID长度必须在{min}和{max}之间
user_role_permission.module_id.not_blank=\u7528\u6237\u7EC4\u6743\u9650\u6A21\u5757ID\u4E0D\u80FD\u4E3A\u7A7A user_role_permission.permission_id.not_blank=用户组权限权限ID不能为空
user_role_permission.module_id.length_range=\u7528\u6237\u7EC4\u6743\u9650\u6A21\u5757ID\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 user_role_permission.permission_id.length_range=用户组权限权限ID长度必须在{min}和{max}之间
user_role_relation.id.not_blank=\u7528\u6237\u7EC4\u5173\u7CFBID\u4E0D\u80FD\u4E3A\u7A7A user_role_permission.module_id.not_blank=用户组权限模块ID不能为空
user_role_relation.user_id.not_blank=\u7528\u6237\u7EC4\u5173\u7CFB\u7528\u6237ID\u4E0D\u80FD\u4E3A\u7A7A user_role_permission.module_id.length_range=用户组权限模块ID长度必须在{min}和{max}之间
user_role_relation.user_id.length_range=\u7528\u6237\u7EC4\u5173\u7CFB\u7528\u6237ID\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 user_role_relation.id.not_blank=用户组关系ID不能为空
user_role_relation.role_id.not_blank=\u7528\u6237\u7EC4\u5173\u7CFB\u7528\u6237\u7EC4ID\u4E0D\u80FD\u4E3A\u7A7A user_role_relation.user_id.not_blank=用户组关系用户ID不能为空
user_role_relation.role_id.length_range=\u7528\u6237\u7EC4\u5173\u7CFB\u7528\u6237\u7EC4ID\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 user_role_relation.user_id.length_range=用户组关系用户ID长度必须在{min}和{max}之间
user_role_relation.source_id.not_blank=\u7528\u6237\u7EC4\u5173\u7CFB\u6765\u6E90ID\u4E0D\u80FD\u4E3A\u7A7A user_role_relation.role_id.not_blank=用户组关系用户组ID不能为空
user_role_relation.source_id.length_range=\u7528\u6237\u7EC4\u5173\u7CFB\u6765\u6E90ID\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 user_role_relation.role_id.length_range=用户组关系用户组ID长度必须在{min}和{max}之间
organization.id.not_blank=\u5DE5\u4F5C\u7A7A\u95F4ID\u4E0D\u80FD\u4E3A\u7A7A user_role_relation.source_id.not_blank=用户组关系来源ID不能为空
organization.name.not_blank=\u5DE5\u4F5C\u7A7A\u95F4\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A user_role_relation.source_id.length_range=用户组关系来源ID长度必须在{min}和{max}之间
organization.name.length_range=\u5DE5\u4F5C\u7A7A\u95F4\u540D\u79F0\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 organization.id.not_blank=工作空间ID不能为空
organization.create_user.not_blank=\u5DE5\u4F5C\u7A7A\u95F4\u521B\u5EFA\u4EBA\u4E0D\u80FD\u4E3A\u7A7A organization.name.not_blank=工作空间名称不能为空
organization.create_user.length_range=\u5DE5\u4F5C\u7A7A\u95F4\u521B\u5EFA\u4EBA\u957F\u5EA6\u5FC5\u987B\u5728{min}\u548C{max}\u4E4B\u95F4 organization.name.length_range=工作空间名称长度必须在{min}和{max}之间
member.id.not_empty=\u6210\u5458\u4E0D\u80FD\u4E3A\u7A7A organization.create_user.not_blank=工作空间创建人不能为空
organization.create_user.length_range=工作空间创建人长度必须在{min}和{max}之间

View File

@ -1,150 +1,151 @@
role.not.global.system=\u89D2\u8272\u4E0D\u662F\u70BA\u5168\u5C40\u7CFB\u7D71\u89D2\u8272 role.not.global.system=角色不是為全局系統角色
role.not.contains.member=\u89D2\u8272\u4E0D\u5305\u542B\u7CFB\u7D71\u6210\u54E1\u89D2\u8272 role.not.contains.member=角色不包含系統成員角色
user.not.login=\u672A\u7372\u53D6\u5230\u767B\u9304\u7528\u6236 user.not.login=未獲取到登錄用戶
auth_source.id.not_blank=\u8A8D\u8B49\u6E90ID\u4E0D\u80FD\u70BA\u7A7A user.not.empty=用戶不呢為空
auth_source.status.length_range=\u8A8D\u8B49\u6E90\u72C0\u614B\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 user.not.exist=用戶不存在
auth_source.status.not_blank=\u8A8D\u8B49\u6E90\u72C0\u614B\u4E0D\u80FD\u70BA\u7A7A auth_source.id.not_blank=認證源ID不能為空
license.id.not_blank=License ID\u4E0D\u80FD\u70BA\u7A7A auth_source.status.length_range=認證源狀態長度必須在{min}和{max}之間
message_task.id.not_blank=\u6D88\u606F\u901A\u77E5\u4EFB\u52D9ID\u4E0D\u80FD\u70BA\u7A7A auth_source.status.not_blank=認證源狀態不能為空
message_task.type.not_blank=\u6D88\u606F\u901A\u77E5\u4EFB\u52D9\u985E\u578B\u4E0D\u80FD\u70BA\u7A7A license.id.not_blank=License ID不能為空
message_task.type.length_range=\u6D88\u606F\u901A\u77E5\u4EFB\u52D9\u985E\u578B\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 message_task.id.not_blank=消息通知任務ID不能為空
message_task.event.not_blank=\u6D88\u606F\u901A\u77E5\u4EFB\u52D9\u4E8B\u4EF6\u4E0D\u80FD\u70BA\u7A7A message_task.type.not_blank=消息通知任務類型不能為空
message_task.event.length_range=\u6D88\u606F\u901A\u77E5\u4EFB\u52D9\u4E8B\u4EF6\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 message_task.type.length_range=消息通知任務類型長度必須在{min}和{max}之間
message_task.receiver.not_blank=\u6D88\u606F\u901A\u77E5\u4EFB\u52D9\u63A5\u6536\u8005\u4E0D\u80FD\u70BA\u7A7A message_task.event.not_blank=消息通知任務事件不能為空
message_task.receiver.length_range=\u6D88\u606F\u901A\u77E5\u4EFB\u52D9\u63A5\u6536\u8005\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 message_task.event.length_range=消息通知任務事件長度必須在{min}和{max}之間
message_task.task_type.not_blank=\u6D88\u606F\u901A\u77E5\u4EFB\u52D9\u4EFB\u52D9\u985E\u578B\u4E0D\u80FD\u70BA\u7A7A message_task.receiver.not_blank=消息通知任務接收者不能為空
message_task.task_type.length_range=\u6D88\u606F\u901A\u77E5\u4EFB\u52D9\u4EFB\u52D9\u985E\u578B\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 message_task.receiver.length_range=消息通知任務接收者長度必須在{min}和{max}之間
message_task.test_id.not_blank=\u6D88\u606F\u901A\u77E5\u4EFB\u52D9\u6E2C\u8A66ID\u4E0D\u80FD\u70BA\u7A7A message_task.task_type.not_blank=消息通知任務任務類型不能為空
message_task.test_id.length_range=\u6D88\u606F\u901A\u77E5\u4EFB\u52D9\u6E2C\u8A66ID\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 message_task.task_type.length_range=消息通知任務任務類型長度必須在{min}和{max}之間
message_task.project_id.not_blank=\u6D88\u606F\u901A\u77E5\u4EFB\u52D9\u9805\u76EEID\u4E0D\u80FD\u70BA\u7A7A message_task.test_id.not_blank=消息通知任務測試ID不能為空
message_task.project_id.length_range=\u6D88\u606F\u901A\u77E5\u4EFB\u52D9\u9805\u76EEID\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 message_task.test_id.length_range=消息通知任務測試ID長度必須在{min}和{max}之間
message_task_blob.id.not_blank=\u6D88\u606F\u901A\u77E5\u4EFB\u52D9ID\u4E0D\u80FD\u70BA\u7A7A message_task.project_id.not_blank=消息通知任務項目ID不能為空
notification.id.not_blank=\u6D88\u606F\u901A\u77E5ID\u4E0D\u80FD\u70BA\u7A7A message_task.project_id.length_range=消息通知任務項目ID長度必須在{min}和{max}之間
notification.type.not_blank=\u6D88\u606F\u901A\u77E5\u985E\u578B\u4E0D\u80FD\u70BA\u7A7A message_task_blob.id.not_blank=消息通知任務ID不能為空
notification.type.length_range=\u6D88\u606F\u901A\u77E5\u985E\u578B\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 notification.id.not_blank=消息通知ID不能為空
notification.receiver.not_blank=\u6D88\u606F\u901A\u77E5\u63A5\u6536\u8005\u4E0D\u80FD\u70BA\u7A7A notification.type.not_blank=消息通知類型不能為空
notification.receiver.length_range=\u6D88\u606F\u901A\u77E5\u63A5\u6536\u8005\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 notification.type.length_range=消息通知類型長度必須在{min}和{max}之間
notification.title.not_blank=\u6D88\u606F\u901A\u77E5\u6A19\u984C\u4E0D\u80FD\u70BA\u7A7A notification.receiver.not_blank=消息通知接收者不能為空
notification.title.length_range=\u6D88\u606F\u901A\u77E5\u6A19\u984C\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 notification.receiver.length_range=消息通知接收者長度必須在{min}和{max}之間
notification.status.not_blank=\u6D88\u606F\u901A\u77E5\u72C0\u614B\u4E0D\u80FD\u70BA\u7A7A notification.title.not_blank=消息通知標題不能為空
notification.status.length_range=\u6D88\u606F\u901A\u77E5\u72C0\u614B\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 notification.title.length_range=消息通知標題長度必須在{min}和{max}之間
notification.operator.not_blank=\u6D88\u606F\u901A\u77E5\u64CD\u4F5C\u8005\u4E0D\u80FD\u70BA\u7A7A notification.status.not_blank=消息通知狀態不能為空
notification.operator.length_range=\u6D88\u606F\u901A\u77E5\u64CD\u4F5C\u8005\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 notification.status.length_range=消息通知狀態長度必須在{min}和{max}之間
notification.operation.not_blank=\u6D88\u606F\u901A\u77E5\u64CD\u4F5C\u4E0D\u80FD\u70BA\u7A7A notification.operator.not_blank=消息通知操作者不能為空
notification.operation.length_range=\u6D88\u606F\u901A\u77E5\u64CD\u4F5C\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 notification.operator.length_range=消息通知操作者長度必須在{min}和{max}之間
notification.resource_id.not_blank=\u6D88\u606F\u901A\u77E5\u8CC7\u6E90ID\u4E0D\u80FD\u70BA\u7A7A notification.operation.not_blank=消息通知操作不能為空
notification.resource_id.length_range=\u6D88\u606F\u901A\u77E5\u8CC7\u6E90ID\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 notification.operation.length_range=消息通知操作長度必須在{min}和{max}之間
notification.resource_type.not_blank=\u6D88\u606F\u901A\u77E5\u8CC7\u6E90\u985E\u578B\u4E0D\u80FD\u70BA\u7A7A notification.resource_id.not_blank=消息通知資源ID不能為空
notification.resource_type.length_range=\u6D88\u606F\u901A\u77E5\u8CC7\u6E90\u985E\u578B\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 notification.resource_id.length_range=消息通知資源ID長度必須在{min}和{max}之間
notification.resource_name.not_blank=\u6D88\u606F\u901A\u77E5\u8CC7\u6E90\u540D\u7A31\u4E0D\u80FD\u70BA\u7A7A notification.resource_type.not_blank=消息通知資源類型不能為空
notification.resource_name.length_range=\u6D88\u606F\u901A\u77E5\u8CC7\u6E90\u540D\u7A31\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 notification.resource_type.length_range=消息通知資源類型長度必須在{min}和{max}之間
novice_statistics.id.not_blank=\u65B0\u624B\u6751ID\u4E0D\u80FD\u70BA\u7A7A notification.resource_name.not_blank=消息通知資源名稱不能為空
novice_statistics.guide_step.not_blank=\u65B0\u624B\u6751\u6B65\u9A5F\u4E0D\u80FD\u70BA\u7A7A notification.resource_name.length_range=消息通知資源名稱長度必須在{min}和{max}之間
novice_statistics.guide_step.length_range=\u65B0\u624B\u6751\u6B65\u9A5F\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 novice_statistics.id.not_blank=新手村ID不能為空
operating_log.id.not_blank=\u64CD\u4F5C\u65E5\u8A8CID\u4E0D\u80FD\u70BA\u7A7A novice_statistics.guide_step.not_blank=新手村步驟不能為空
operating_log.project_id.not_blank=\u64CD\u4F5C\u65E5\u8A8C\u9805\u76EEID\u4E0D\u80FD\u70BA\u7A7A novice_statistics.guide_step.length_range=新手村步驟長度必須在{min}和{max}之間
operating_log.project_id.length_range=\u64CD\u4F5C\u65E5\u8A8C\u9805\u76EEID\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 operating_log.id.not_blank=操作日誌ID不能為空
operating_log_resource.id.not_blank=\u64CD\u4F5C\u65E5\u8A8C\u8CC7\u6E90ID\u4E0D\u80FD\u70BA\u7A7A operating_log.project_id.not_blank=操作日誌項目ID不能為空
operating_log_resource.operating_log_id.not_blank=\u64CD\u4F5C\u65E5\u8A8C\u8CC7\u6E90\u64CD\u4F5C\u65E5\u8A8CID\u4E0D\u80FD\u70BA\u7A7A operating_log.project_id.length_range=操作日誌項目ID長度必須在{min}和{max}之間
operating_log_resource.operating_log_id.length_range=\u64CD\u4F5C\u65E5\u8A8C\u8CC7\u6E90\u64CD\u4F5C\u65E5\u8A8CID\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 operating_log_resource.id.not_blank=操作日誌資源ID不能為空
operating_log_resource.source_id.not_blank=\u64CD\u4F5C\u65E5\u8A8C\u8CC7\u6E90\u4F86\u6E90ID\u4E0D\u80FD\u70BA\u7A7A operating_log_resource.operating_log_id.not_blank=操作日誌資源操作日誌ID不能為空
operating_log_resource.source_id.length_range=\u64CD\u4F5C\u65E5\u8A8C\u8CC7\u6E90\u4F86\u6E90ID\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 operating_log_resource.operating_log_id.length_range=操作日誌資源操作日誌ID長度必須在{min}和{max}之間
plugin.id.not_blank=\u63D2\u4EF6\u4E3B\u9375\u4E0D\u80FD\u70BA\u7A7A operating_log_resource.source_id.not_blank=操作日誌資源來源ID不能為空
plugin.plugin_id.not_blank=\u63D2\u4EF6ID\u4E0D\u80FD\u70BA\u7A7A operating_log_resource.source_id.length_range=操作日誌資源來源ID長度必須在{min}和{max}之間
plugin.plugin_id.length_range=\u63D2\u4EF6ID\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 plugin.id.not_blank=插件主鍵不能為空
plugin.script_id.not_blank=\u63D2\u4EF6\u8173\u672CID\u4E0D\u80FD\u70BA\u7A7A plugin.plugin_id.not_blank=插件ID不能為空
plugin.script_id.length_range=\u63D2\u4EF6\u8173\u672CID\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 plugin.plugin_id.length_range=插件ID長度必須在{min}和{max}之間
plugin.clazz_name.not_blank=\u63D2\u4EF6\u985E\u540D\u4E0D\u80FD\u70BA\u7A7A plugin.script_id.not_blank=插件腳本ID不能為空
plugin.clazz_name.length_range=\u63D2\u4EF6\u985E\u540D\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 plugin.script_id.length_range=插件腳本ID長度必須在{min}和{max}之間
plugin.jmeter_clazz.not_blank=\u63D2\u4EF6jmeter\u985E\u540D\u4E0D\u80FD\u70BA\u7A7A plugin.clazz_name.not_blank=插件類名不能為空
plugin.jmeter_clazz.length_range=\u63D2\u4EF6jmeter\u985E\u540D\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 plugin.clazz_name.length_range=插件類名長度必須在{min}和{max}之間
plugin.source_path.not_blank=\u63D2\u4EF6\u6E90\u8DEF\u5F91\u4E0D\u80FD\u70BA\u7A7A plugin.jmeter_clazz.not_blank=插件jmeter類名不能為空
plugin.source_path.length_range=\u63D2\u4EF6\u6E90\u8DEF\u5F91\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 plugin.jmeter_clazz.length_range=插件jmeter類名長度必須在{min}和{max}之間
plugin.source_name.not_blank=\u63D2\u4EF6\u6E90\u540D\u7A31\u4E0D\u80FD\u70BA\u7A7A plugin.source_path.not_blank=插件源路徑不能為空
plugin.source_name.length_range=\u63D2\u4EF6\u6E90\u540D\u7A31\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 plugin.source_path.length_range=插件源路徑長度必須在{min}和{max}之間
plugin.scenario.not_blank=\u63D2\u4EF6\u5834\u666F\u4E0D\u80FD\u70BA\u7A7A plugin.source_name.not_blank=插件源名稱不能為空
plugin.scenario.length_range=\u63D2\u4EF6\u5834\u666F\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 plugin.source_name.length_range=插件源名稱長度必須在{min}和{max}之間
plugin_blob.id.not_blank=\u63D2\u4EF6ID\u4E0D\u80FD\u70BA\u7A7A plugin.scenario.not_blank=插件場景不能為空
quota.id.not_blank=\u914D\u984DID\u4E0D\u80FD\u70BA\u7A7A plugin.scenario.length_range=插件場景長度必須在{min}和{max}之間
schedule.id.not_blank=\u5B9A\u6642\u4EFB\u52D9ID\u4E0D\u80FD\u70BA\u7A7A plugin_blob.id.not_blank=插件ID不能為空
schedule.type.not_blank=\u5B9A\u6642\u4EFB\u52D9\u985E\u578B\u4E0D\u80FD\u70BA\u7A7A quota.id.not_blank=配額ID不能為空
schedule.type.length_range=\u5B9A\u6642\u4EFB\u52D9\u985E\u578B\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 schedule.id.not_blank=定時任務ID不能為空
schedule.value.not_blank=\u5B9A\u6642\u4EFB\u52D9\u503C\u4E0D\u80FD\u70BA\u7A7A schedule.type.not_blank=定時任務類型不能為空
schedule.value.length_range=\u5B9A\u6642\u4EFB\u52D9\u503C\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 schedule.type.length_range=定時任務類型長度必須在{min}和{max}之間
schedule.job.not_blank=\u5B9A\u6642\u4EFB\u52D9\u4E0D\u80FD\u70BA\u7A7A schedule.value.not_blank=定時任務值不能為空
schedule.job.length_range=\u5B9A\u6642\u4EFB\u52D9\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 schedule.value.length_range=定時任務值長度必須在{min}和{max}之間
schedule.create_user.not_blank=\u5B9A\u6642\u4EFB\u52D9\u5275\u5EFA\u4EBA\u4E0D\u80FD\u70BA\u7A7A schedule.job.not_blank=定時任務不能為空
schedule.create_user.length_range=\u5B9A\u6642\u4EFB\u52D9\u5275\u5EFA\u4EBA\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 schedule.job.length_range=定時任務長度必須在{min}和{max}之間
service_integration.id.not_blank=\u670D\u52D9\u96C6\u6210ID\u4E0D\u80FD\u70BA\u7A7A schedule.create_user.not_blank=定時任務創建人不能為空
service_integration.platform.not_blank=\u670D\u52D9\u96C6\u6210\u5E73\u53F0\u4E0D\u80FD\u70BA\u7A7A schedule.create_user.length_range=定時任務創建人長度必須在{min}和{max}之間
service_integration.platform.length_range=\u670D\u52D9\u96C6\u6210\u5E73\u53F0\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 service_integration.id.not_blank=服務集成ID不能為空
system_parameter.param_key.not_blank=\u7CFB\u7D71\u53C3\u6578Key\u4E0D\u80FD\u70BA\u7A7A service_integration.platform.not_blank=服務集成平台不能為空
system_parameter.type.not_blank=\u7CFB\u7D71\u53C3\u6578\u985E\u578B\u4E0D\u80FD\u70BA\u7A7A service_integration.platform.length_range=服務集成平台長度必須在{min}和{max}之間
system_parameter.type.length_range=\u7CFB\u7D71\u53C3\u6578\u985E\u578B\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 system_parameter.param_key.not_blank=系統參數Key不能為空
test_resource.id.not_blank=\u8CC7\u6E90\u6C60\u7BC0\u9EDEID\u4E0D\u80FD\u70BA\u7A7A system_parameter.type.not_blank=系統參數類型不能為空
test_resource.test_resource_pool_id.not_blank=\u8CC7\u6E90\u6C60ID\u4E0D\u80FD\u70BA\u7A7A system_parameter.type.length_range=系統參數類型長度必須在{min}和{max}之間
test_resource.test_resource_pool_id.length_range=\u8CC7\u6E90\u6C60ID\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 test_resource.id.not_blank=資源池節點ID不能為空
test_resource.status.not_blank=\u8CC7\u6E90\u6C60\u7BC0\u9EDE\u72C0\u614B\u4E0D\u80FD\u70BA\u7A7A test_resource.test_resource_pool_id.not_blank=資源池ID不能為空
test_resource.status.length_range=\u8CC7\u6E90\u6C60\u7BC0\u9EDE\u72C0\u614B\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 test_resource.test_resource_pool_id.length_range=資源池ID長度必須在{min}和{max}之間
test_resource_pool.id.not_blank=\u8CC7\u6E90\u6C60ID\u4E0D\u80FD\u70BA\u7A7A test_resource.status.not_blank=資源池節點狀態不能為空
test_resource_pool.name.not_blank=\u8CC7\u6E90\u6C60\u540D\u7A31\u4E0D\u80FD\u70BA\u7A7A test_resource.status.length_range=資源池節點狀態長度必須在{min}和{max}之間
test_resource_pool.name.length_range=\u8CC7\u6E90\u6C60\u540D\u7A31\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 test_resource_pool.id.not_blank=資源池ID不能為空
test_resource_pool.type.not_blank=\u8CC7\u6E90\u6C60\u985E\u578B\u4E0D\u80FD\u70BA\u7A7A test_resource_pool.name.not_blank=資源池名稱不能為空
test_resource_pool.type.length_range=\u8CC7\u6E90\u6C60\u985E\u578B\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 test_resource_pool.name.length_range=資源池名稱長度必須在{min}和{max}之間
test_resource_pool.status.not_blank=\u8CC7\u6E90\u6C60\u72C0\u614B\u4E0D\u80FD\u70BA\u7A7A test_resource_pool.type.not_blank=資源池類型不能為空
test_resource_pool.status.length_range=\u8CC7\u6E90\u6C60\u72C0\u614B\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 test_resource_pool.type.length_range=資源池類型長度必須在{min}和{max}之間
user.id.not_blank=\u7528\u6236ID\u4E0D\u80FD\u70BA\u7A7A test_resource_pool.status.not_blank=資源池狀態不能為空
user.name.not_blank=\u7528\u6236\u540D\u7A31\u4E0D\u80FD\u70BA\u7A7A test_resource_pool.status.length_range=資源池狀態長度必須在{min}和{max}之間
user.name.length_range=\u7528\u6236\u540D\u7A31\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 user.id.not_blank=用戶ID不能為空
user.email.not_blank=\u7528\u6236email\u4E0D\u80FD\u70BA\u7A7A user.name.not_blank=用戶名稱不能為空
user.email.length_range=\u7528\u6236email\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 user.name.length_range=用戶名稱長度必須在{min}和{max}之間
user.email.repeat=\u7528\u6236email\u5DF2\u5B58\u5728 user.email.not_blank=用戶email不能為空
user.email.invalid=\u7528\u6236email\u683C\u5F0F\u4E0D\u6B63\u78BA user.email.length_range=用戶email長度必須在{min}和{max}之間
user.status.not_blank=\u7528\u6236\u72C0\u614B\u4E0D\u80FD\u70BA\u7A7A user.email.repeat=用戶email已存在
user.status.length_range=\u7528\u6236\u72C0\u614B\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 user.email.invalid=用戶email格式不正確
user.source.not_blank=\u7528\u6236\u4F86\u6E90\u4E0D\u80FD\u70BA\u7A7A user.status.not_blank=用戶狀態不能為空
user.source.length_range=\u7528\u6236\u4F86\u6E90\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 user.status.length_range=用戶狀態長度必須在{min}和{max}之間
user.create_user.not_blank=\u7528\u6236\u5275\u5EFA\u4EBA\u4E0D\u80FD\u70BA\u7A7A user.source.not_blank=用戶來源不能為空
user.create_user.length_range=\u7528\u6236\u5275\u5EFA\u4EBA\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 user.source.length_range=用戶來源長度必須在{min}和{max}之間
user_extend.id.not_blank=\u7528\u6236ID\u4E0D\u80FD\u70BA\u7A7A user.create_user.not_blank=用戶創建人不能為空
user_key.id.not_blank=\u7528\u6236ApiKey ID\u4E0D\u80FD\u70BA\u7A7A user.create_user.length_range=用戶創建人長度必須在{min}和{max}之間
user_key.create_user.not_blank=\u7528\u6236ApiKey\u5275\u5EFA\u4EBA\u4E0D\u80FD\u70BA\u7A7A user_extend.id.not_blank=用戶ID不能為空
user_key.create_user.length_range=\u7528\u6236ApiKey\u5275\u5EFA\u4EBA\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 user_key.id.not_blank=用戶ApiKey ID不能為空
user_key.access_key.not_blank=\u7528\u6236ApiKey access key\u4E0D\u80FD\u70BA\u7A7A user_key.create_user.not_blank=用戶ApiKey創建人不能為空
user_key.access_key.length_range=\u7528\u6236ApiKey access key\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 user_key.create_user.length_range=用戶ApiKey創建人長度必須在{min}和{max}之間
user_key.secret_key.not_blank=\u7528\u6236ApiKey secret key\u4E0D\u80FD\u70BA\u7A7A user_key.access_key.not_blank=用戶ApiKey access key不能為空
user_key.secret_key.length_range=\u7528\u6236ApiKey secret key\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 user_key.access_key.length_range=用戶ApiKey access key長度必須在{min}和{max}之間
user.info.not_empty=\u7528\u6236\u4FE1\u606F\u4E0D\u80FD\u70BA\u7A7A user_key.secret_key.not_blank=用戶ApiKey secret key不能為空
user.organizationId.not_blank=\u7528\u6236\u7D44\u7E54\u4E0D\u80FD\u70BA\u7A7A user_key.secret_key.length_range=用戶ApiKey secret key長度必須在{min}和{max}之間
user.projectId.not_blank=\u7528\u6236\u9805\u76EE\u4E0D\u80FD\u70BA\u7A7A user.info.not_empty=用戶信息不能為空
user_role.id.not_blank=\u7528\u6236\u7D44ID\u4E0D\u80FD\u70BA\u7A7A user.organizationId.not_blank=用戶組織不能為空
user_role.name.not_blank=\u7528\u6236\u7D44\u540D\u7A31\u4E0D\u80FD\u70BA\u7A7A user.projectId.not_blank=用戶項目不能為空
user_role.name.length_range=\u7528\u6236\u7D44\u540D\u7A31\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 user_role.id.not_blank=用戶組ID不能為空
user_role.system.not_blank=\u662F\u5426\u662F\u7CFB\u7D71\u7528\u6236\u7D44\u4E0D\u80FD\u70BA\u7A7A user_role.name.not_blank=用戶組名稱不能為空
user_role.system.length_range=\u662F\u5426\u662F\u7CFB\u7D71\u7528\u6236\u7D44\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 user_role.name.length_range=用戶組名稱長度必須在{min}和{max}之間
user_role.type.not_blank=\u7528\u6236\u7D44\u985E\u578B\u4E0D\u80FD\u70BA\u7A7A user_role.system.not_blank=是否是系統用戶組不能為空
user_role.type.length_range=\u7528\u6236\u7D44\u985E\u578B\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 user_role.system.length_range=是否是系統用戶組長度必須在{min}和{max}之間
user_role.create_user.not_blank=\u7528\u6236\u7D44\u5275\u5EFA\u4EBA\u4E0D\u80FD\u70BA\u7A7A user_role.type.not_blank=用戶組類型不能為空
user_role.create_user.length_range=\u7528\u6236\u7D44\u5275\u5EFA\u4EBA\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 user_role.type.length_range=用戶組類型長度必須在{min}和{max}之間
user_role.scope_id.not_blank=\u7528\u6236\u7D44\u61C9\u7528\u7BC4\u570D\u4E0D\u80FD\u70BA\u7A7A user_role.create_user.not_blank=用戶組創建人不能為空
user_role.scope_id.length_range=\u7528\u6236\u7D44\u61C9\u7528\u7BC4\u570D\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 user_role.create_user.length_range=用戶組創建人長度必須在{min}和{max}之間
user_role_permission.id.not_blank=\u7528\u6236\u7D44\u6B0A\u9650ID\u4E0D\u80FD\u70BA\u7A7A user_role.scope_id.not_blank=用戶組應用範圍不能為空
user_role_permission.role_id.not_blank=\u7528\u6236\u7D44\u6B0A\u9650\u7528\u6236\u7D44ID\u4E0D\u80FD\u70BA\u7A7A user_role.scope_id.length_range=用戶組應用範圍長度必須在{min}和{max}之間
user_role_permission.role_id.length_range=\u7528\u6236\u7D44\u6B0A\u9650\u7528\u6236\u7D44ID\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 user_role_permission.id.not_blank=用戶組權限ID不能為空
user_role_permission.permission_id.not_blank=\u7528\u6236\u7D44\u6B0A\u9650\u6B0A\u9650ID\u4E0D\u80FD\u70BA\u7A7A user_role_permission.role_id.not_blank=用戶組權限用戶組ID不能為空
user_role_permission.permission_id.length_range=\u7528\u6236\u7D44\u6B0A\u9650\u6B0A\u9650ID\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 user_role_permission.role_id.length_range=用戶組權限用戶組ID長度必須在{min}和{max}之間
user_role_permission.module_id.not_blank=\u7528\u6236\u7D44\u6B0A\u9650\u6A21\u584AID\u4E0D\u80FD\u70BA\u7A7A user_role_permission.permission_id.not_blank=用戶組權限權限ID不能為空
user_role_permission.module_id.length_range=\u7528\u6236\u7D44\u6B0A\u9650\u6A21\u584AID\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 user_role_permission.permission_id.length_range=用戶組權限權限ID長度必須在{min}和{max}之間
user_role_relation.id.not_blank=\u7528\u6236\u7D44\u95DC\u4FC2ID\u4E0D\u80FD\u70BA\u7A7A user_role_permission.module_id.not_blank=用戶組權限模塊ID不能為空
user_role_relation.user_id.not_blank=\u7528\u6236\u7D44\u95DC\u4FC2\u7528\u6236ID\u4E0D\u80FD\u70BA\u7A7A user_role_permission.module_id.length_range=用戶組權限模塊ID長度必須在{min}和{max}之間
user_role_relation.user_id.length_range=\u7528\u6236\u7D44\u95DC\u4FC2\u7528\u6236ID\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 user_role_relation.id.not_blank=用戶組關係ID不能為空
user_role_relation.role_id.not_blank=\u7528\u6236\u7D44\u95DC\u4FC2\u7528\u6236\u7D44ID\u4E0D\u80FD\u70BA\u7A7A user_role_relation.user_id.not_blank=用戶組關係用戶ID不能為空
user_role_relation.role_id.length_range=\u7528\u6236\u7D44\u95DC\u4FC2\u7528\u6236\u7D44ID\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 user_role_relation.user_id.length_range=用戶組關係用戶ID長度必須在{min}和{max}之間
user_role_relation.source_id.not_blank=\u7528\u6236\u7D44\u95DC\u4FC2\u4F86\u6E90ID\u4E0D\u80FD\u70BA\u7A7A user_role_relation.role_id.not_blank=用戶組關係用戶組ID不能為空
user_role_relation.source_id.length_range=\u7528\u6236\u7D44\u95DC\u4FC2\u4F86\u6E90ID\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 user_role_relation.role_id.length_range=用戶組關係用戶組ID長度必須在{min}和{max}之間
organization.id.not_blank=\u5DE5\u4F5C\u7A7A\u9593ID\u4E0D\u80FD\u70BA\u7A7A user_role_relation.source_id.not_blank=用戶組關係來源ID不能為空
organization.name.not_blank=\u5DE5\u4F5C\u7A7A\u9593\u540D\u7A31\u4E0D\u80FD\u70BA\u7A7A user_role_relation.source_id.length_range=用戶組關係來源ID長度必須在{min}和{max}之間
organization.name.length_range=\u5DE5\u4F5C\u7A7A\u9593\u540D\u7A31\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 organization.id.not_blank=工作空間ID不能為空
organization.create_user.not_blank=\u5DE5\u4F5C\u7A7A\u9593\u5275\u5EFA\u4EBA\u4E0D\u80FD\u70BA\u7A7A organization.name.not_blank=工作空間名稱不能為空
organization.create_user.length_range=\u5DE5\u4F5C\u7A7A\u9593\u5275\u5EFA\u4EBA\u9577\u5EA6\u5FC5\u9808\u5728{min}\u548C{max}\u4E4B\u9593 organization.name.length_range=工作空間名稱長度必須在{min}和{max}之間
member.id.not_empty=\u6210\u54E1\u4E0D\u80FD\u7232\u7A7A organization.create_user.not_blank=工作空間創建人不能為空
organization.create_user.length_range=工作空間創建人長度必須在{min}和{max}之間

View File

@ -4,6 +4,7 @@ package io.metersphere.system.controller;
import com.github.pagehelper.Page; import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import io.metersphere.sdk.constants.PermissionConstants; import io.metersphere.sdk.constants.PermissionConstants;
import io.metersphere.sdk.constants.UserSourceEnum;
import io.metersphere.sdk.dto.BasePageRequest; import io.metersphere.sdk.dto.BasePageRequest;
import io.metersphere.sdk.dto.UserDTO; import io.metersphere.sdk.dto.UserDTO;
import io.metersphere.sdk.log.annotation.RequestLog; import io.metersphere.sdk.log.annotation.RequestLog;
@ -13,9 +14,10 @@ import io.metersphere.sdk.util.PageUtils;
import io.metersphere.sdk.util.Pager; import io.metersphere.sdk.util.Pager;
import io.metersphere.sdk.util.SessionUtils; import io.metersphere.sdk.util.SessionUtils;
import io.metersphere.system.dto.UserBatchCreateDTO; import io.metersphere.system.dto.UserBatchCreateDTO;
import io.metersphere.system.dto.UserEditEnableRequest;
import io.metersphere.system.dto.UserEditRequest; import io.metersphere.system.dto.UserEditRequest;
import io.metersphere.system.dto.UserInfo;
import io.metersphere.system.dto.UserRoleOption; import io.metersphere.system.dto.UserRoleOption;
import io.metersphere.system.dto.response.UserTableResponse;
import io.metersphere.system.service.GlobalUserRoleService; import io.metersphere.system.service.GlobalUserRoleService;
import io.metersphere.system.service.UserService; import io.metersphere.system.service.UserService;
import io.metersphere.validation.groups.Created; import io.metersphere.validation.groups.Created;
@ -51,8 +53,7 @@ public class UserController {
@PostMapping("/add") @PostMapping("/add")
@RequiresPermissions(PermissionConstants.SYSTEM_USER_READ_ADD) @RequiresPermissions(PermissionConstants.SYSTEM_USER_READ_ADD)
public UserBatchCreateDTO addUser(@Validated({Created.class}) @RequestBody UserBatchCreateDTO userCreateDTO) { public UserBatchCreateDTO addUser(@Validated({Created.class}) @RequestBody UserBatchCreateDTO userCreateDTO) {
userCreateDTO.setCreateUserToList(SessionUtils.getUserId()); return userService.addBatch(userCreateDTO, UserSourceEnum.LOCAL.name(), SessionUtils.getUserId());
return userService.addBatch(userCreateDTO);
} }
@PostMapping("/update") @PostMapping("/update")
@ -60,15 +61,20 @@ public class UserController {
@RequestLog(type = OperationLogType.UPDATE, module = OperationLogModule.SYSTEM_USER, @RequestLog(type = OperationLogType.UPDATE, module = OperationLogModule.SYSTEM_USER,
sourceId = "#request.id", details = "#request.name") sourceId = "#request.id", details = "#request.name")
public UserEditRequest updateUser(@Validated({Updated.class}) @RequestBody UserEditRequest request) { public UserEditRequest updateUser(@Validated({Updated.class}) @RequestBody UserEditRequest request) {
request.setUpdateUser(SessionUtils.getUserId()); return userService.updateUser(request, SessionUtils.getUserId());
return userService.updateUser(request);
} }
@PostMapping("/page") @PostMapping("/page")
@RequiresPermissions(PermissionConstants.SYSTEM_USER_READ) @RequiresPermissions(PermissionConstants.SYSTEM_USER_READ)
public Pager<List<UserInfo>> list(@Validated @RequestBody BasePageRequest request) { public Pager<List<UserTableResponse>> list(@Validated @RequestBody BasePageRequest request) {
Page<Object> page = PageHelper.startPage(request.getCurrent(), request.getPageSize(), Page<Object> page = PageHelper.startPage(request.getCurrent(), request.getPageSize(),
StringUtils.isNotBlank(request.getSortString()) ? request.getSortString() : "create_time desc"); StringUtils.isNotBlank(request.getSortString()) ? request.getSortString() : "create_time desc");
return PageUtils.setPageInfo(page, userService.list(request)); return PageUtils.setPageInfo(page, userService.list(request));
} }
@PostMapping("/update/enable")
@RequiresPermissions(PermissionConstants.SYSTEM_USER_READ_UPDATE)
public UserEditEnableRequest updateUserEnable(@Validated @RequestBody UserEditEnableRequest request) {
return userService.updateUserEnable(request, SessionUtils.getSessionId());
}
} }

View File

@ -15,23 +15,11 @@ public class UserBatchCreateDTO {
@Schema(title = "用户信息集合", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(title = "用户信息集合", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(groups = {Created.class, Updated.class}, message = "{user.info.not_empty}") @NotEmpty(groups = {Created.class, Updated.class}, message = "{user.info.not_empty}")
List<@Valid UserInfo> userInfoList; List<@Valid UserCreateInfo> userInfoList;
@Schema(title = "用户组", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(title = "用户组", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(groups = {Created.class, Updated.class}, message = "{user_role.id.not_blank}") @NotEmpty(groups = {Created.class, Updated.class}, message = "{user_role.id.not_blank}")
List<@Valid @NotBlank(message = "{user_role.id.not_blank}", groups = {Created.class, Updated.class}) String> userRoleIdList; List<@Valid @NotBlank(message = "{user_role.id.not_blank}", groups = {Created.class, Updated.class}) String> userRoleIdList;
public void setCreateUserToList(String userSessionId) {
userInfoList.forEach(user -> {
user.setCreateUser(userSessionId);
user.setUpdateUser(userSessionId);
});
}
public void setUpdateUserToList(String userSessionId) {
userInfoList.forEach(user -> {
user.setUpdateUser(userSessionId);
});
}
} }

View File

@ -1,7 +1,5 @@
package io.metersphere.system.dto; package io.metersphere.system.dto;
import io.metersphere.system.domain.Organization;
import io.metersphere.system.domain.UserRole;
import io.metersphere.validation.groups.Created; import io.metersphere.validation.groups.Created;
import io.metersphere.validation.groups.Updated; import io.metersphere.validation.groups.Updated;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
@ -10,15 +8,9 @@ import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size; import jakarta.validation.constraints.Size;
import lombok.Data; import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data @Data
public class UserInfo { public class UserCreateInfo {
@Schema(title = "用户ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Schema(title = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED)
@NotBlank(message = "{user.id.not_blank}", groups = {Updated.class})
@Size(min = 1, max = 50, message = "{user.id.length_range}", groups = {Updated.class})
private String id; private String id;
@Schema(title = "用户名", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(title = "用户名", requiredMode = Schema.RequiredMode.REQUIRED)
@ -32,28 +24,7 @@ public class UserInfo {
@Email(message = "{user.email.invalid}", groups = {Created.class, Updated.class}) @Email(message = "{user.email.invalid}", groups = {Created.class, Updated.class})
private String email; private String email;
@Schema(title = "创建时间")
private Long createTime;
@Schema(title = "更新时间")
private Long updateTime;
@Schema(title = "手机号") @Schema(title = "手机号")
private String phone; private String phone;
@Schema(title = "来源LOCAL OIDC CAS OAUTH2", requiredMode = Schema.RequiredMode.REQUIRED)
@NotBlank(message = "{user.source.not_blank}", groups = {Created.class})
@Size(min = 1, max = 50, message = "{user.source.length_range}", groups = {Created.class, Updated.class})
private String source;
@Schema(title = "创建人")
private String createUser;
@Schema(title = "修改人")
private String updateUser;
@Schema(title = "用户所属组织")
private List<Organization> organizationList = new ArrayList<>();
@Schema(title = "用户所属用户组")
private List<UserRole> userRoleList = new ArrayList<>();
} }

View File

@ -0,0 +1,16 @@
package io.metersphere.system.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
import java.util.List;
@Data
public class UserEditEnableRequest {
@Schema(title = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "{user.not.empty}")
List<String> userIdList;
boolean enable;
}

View File

@ -13,7 +13,7 @@ import java.util.List;
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Data @Data
public class UserEditRequest extends UserInfo { public class UserEditRequest extends UserCreateInfo {
@Schema(title = "用户组", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(title = "用户组", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(groups = {Created.class, Updated.class}, message = "{user_role.id.not_blank}") @NotEmpty(groups = {Created.class, Updated.class}, message = "{user_role.id.not_blank}")
List<@Valid @NotBlank(message = "{user_role.id.not_blank}", groups = {Created.class, Updated.class}) String> userRoleIdList; List<@Valid @NotBlank(message = "{user_role.id.not_blank}", groups = {Created.class, Updated.class}) String> userRoleIdList;

View File

@ -0,0 +1,18 @@
package io.metersphere.system.dto.response;
import io.metersphere.system.domain.Organization;
import io.metersphere.system.domain.User;
import io.metersphere.system.domain.UserRole;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class UserTableResponse extends User {
@Schema(title = "用户所属组织")
private List<Organization> organizationList = new ArrayList<>();
@Schema(title = "用户所属用户组")
private List<UserRole> userRoleList = new ArrayList<>();
}

View File

@ -5,7 +5,7 @@ import io.metersphere.sdk.log.constants.OperationLogModule;
import io.metersphere.sdk.log.constants.OperationLogType; import io.metersphere.sdk.log.constants.OperationLogType;
import io.metersphere.sdk.log.service.OperationLogService; import io.metersphere.sdk.log.service.OperationLogService;
import io.metersphere.system.domain.*; import io.metersphere.system.domain.*;
import io.metersphere.system.dto.UserInfo; import io.metersphere.system.dto.response.UserTableResponse;
import io.metersphere.system.mapper.ExtUserRoleRelationMapper; import io.metersphere.system.mapper.ExtUserRoleRelationMapper;
import io.metersphere.system.mapper.OrganizationMapper; import io.metersphere.system.mapper.OrganizationMapper;
import io.metersphere.system.mapper.UserRoleMapper; import io.metersphere.system.mapper.UserRoleMapper;
@ -114,7 +114,7 @@ public class UserRoleRelationService {
} }
public Map<String, UserInfo> selectGlobalUserRoleAndOrganization(@Valid @NotEmpty List<String> userIdList) { public Map<String, UserTableResponse> selectGlobalUserRoleAndOrganization(@Valid @NotEmpty List<String> userIdList) {
List<UserRoleRelation> userRoleRelationList = extUserRoleRelationMapper.listByUserIdAndScope(userIdList); List<UserRoleRelation> userRoleRelationList = extUserRoleRelationMapper.listByUserIdAndScope(userIdList);
List<String> userRoleIdList = userRoleRelationList.stream().map(UserRoleRelation::getRoleId).collect(Collectors.toList()); List<String> userRoleIdList = userRoleRelationList.stream().map(UserRoleRelation::getRoleId).collect(Collectors.toList());
List<String> sourceIdList = userRoleRelationList.stream().map(UserRoleRelation::getSourceId).collect(Collectors.toList()); List<String> sourceIdList = userRoleRelationList.stream().map(UserRoleRelation::getSourceId).collect(Collectors.toList());
@ -132,11 +132,11 @@ public class UserRoleRelationService {
organizationMap = organizationMapper.selectByExample(organizationExample).stream() organizationMap = organizationMapper.selectByExample(organizationExample).stream()
.collect(Collectors.toMap(Organization::getId, item -> item)); .collect(Collectors.toMap(Organization::getId, item -> item));
} }
Map<String, UserInfo> returnMap = new HashMap<>(); Map<String, UserTableResponse> returnMap = new HashMap<>();
for (UserRoleRelation userRoleRelation : userRoleRelationList) { for (UserRoleRelation userRoleRelation : userRoleRelationList) {
UserInfo userInfo = returnMap.get(userRoleRelation.getUserId()); UserTableResponse userInfo = returnMap.get(userRoleRelation.getUserId());
if (userInfo == null) { if (userInfo == null) {
userInfo = new UserInfo(); userInfo = new UserTableResponse();
userInfo.setId(userRoleRelation.getUserId()); userInfo.setId(userRoleRelation.getUserId());
returnMap.put(userRoleRelation.getUserId(), userInfo); returnMap.put(userRoleRelation.getUserId(), userInfo);
} }

View File

@ -12,12 +12,16 @@ import io.metersphere.sdk.util.CodingUtil;
import io.metersphere.sdk.util.Translator; import io.metersphere.sdk.util.Translator;
import io.metersphere.system.domain.OperationLog; import io.metersphere.system.domain.OperationLog;
import io.metersphere.system.domain.User; import io.metersphere.system.domain.User;
import io.metersphere.system.domain.UserExample;
import io.metersphere.system.dto.UserBatchCreateDTO; import io.metersphere.system.dto.UserBatchCreateDTO;
import io.metersphere.system.dto.UserCreateInfo;
import io.metersphere.system.dto.UserEditEnableRequest;
import io.metersphere.system.dto.UserEditRequest; import io.metersphere.system.dto.UserEditRequest;
import io.metersphere.system.dto.UserInfo; import io.metersphere.system.dto.response.UserTableResponse;
import io.metersphere.system.mapper.UserMapper; import io.metersphere.system.mapper.UserMapper;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -63,14 +67,14 @@ public class UserService {
return logs; return logs;
} }
private void validateUserInfo(List<UserInfo> userList) { private void validateUserInfo(List<UserCreateInfo> userList) {
//判断参数内是否含有重复邮箱 //判断参数内是否含有重复邮箱
List<String> emailList = new ArrayList<>(); List<String> emailList = new ArrayList<>();
List<String> repeatEmailList = new ArrayList<>(); List<String> repeatEmailList = new ArrayList<>();
var userInDbMap = baseUserMapper.selectUserIdByEmailList( var userInDbMap = baseUserMapper.selectUserIdByEmailList(
userList.stream().map(UserInfo::getEmail).collect(Collectors.toList())) userList.stream().map(UserCreateInfo::getEmail).collect(Collectors.toList()))
.stream().collect(Collectors.toMap(User::getEmail, User::getId)); .stream().collect(Collectors.toMap(User::getEmail, User::getId));
for (UserInfo user : userList) { for (UserCreateInfo user : userList) {
if (emailList.contains(user.getEmail())) { if (emailList.contains(user.getEmail())) {
repeatEmailList.add(user.getEmail()); repeatEmailList.add(user.getEmail());
} else { } else {
@ -87,20 +91,22 @@ public class UserService {
} }
} }
public UserBatchCreateDTO addBatch(UserBatchCreateDTO userCreateDTO) { public UserBatchCreateDTO addBatch(UserBatchCreateDTO userCreateDTO, String source, String operator) {
this.validateUserInfo(userCreateDTO.getUserInfoList()); this.validateUserInfo(userCreateDTO.getUserInfoList());
globalUserRoleService.checkRoleIsGlobalAndHaveMember(userCreateDTO.getUserRoleIdList(), true); globalUserRoleService.checkRoleIsGlobalAndHaveMember(userCreateDTO.getUserRoleIdList(), true);
long createTime = System.currentTimeMillis(); long createTime = System.currentTimeMillis();
List<User> saveUserList = new ArrayList<>(); List<User> saveUserList = new ArrayList<>();
//添加用户 //添加用户
for (UserInfo userInfo : userCreateDTO.getUserInfoList()) { for (UserCreateInfo userInfo : userCreateDTO.getUserInfoList()) {
userInfo.setId(UUID.randomUUID().toString()); userInfo.setId(UUID.randomUUID().toString());
userInfo.setCreateTime(createTime);
userInfo.setUpdateTime(createTime);
User user = new User(); User user = new User();
BeanUtils.copyBean(user, userInfo); BeanUtils.copyBean(user, userInfo);
user.setCreateUser(operator);
user.setCreateTime(createTime);
user.setUpdateUser(operator);
user.setUpdateTime(createTime);
user.setPassword(CodingUtil.md5(user.getEmail())); user.setPassword(CodingUtil.md5(user.getEmail()));
user.setSource(source);
userMapper.insertSelective(user); userMapper.insertSelective(user);
saveUserList.add(user); saveUserList.add(user);
} }
@ -126,15 +132,15 @@ public class UserService {
return userDTO; return userDTO;
} }
public List<UserInfo> list(BasePageRequest request) { public List<UserTableResponse> list(BasePageRequest request) {
List<UserInfo> returnList = new ArrayList<>(); List<UserTableResponse> returnList = new ArrayList<>();
List<User> userList = baseUserMapper.selectByKeyword(request.getKeyword()); List<User> userList = baseUserMapper.selectByKeyword(request.getKeyword());
List<String> userIdList = userList.stream().map(User::getId).collect(Collectors.toList()); List<String> userIdList = userList.stream().map(User::getId).collect(Collectors.toList());
Map<String, UserInfo> roleAndOrganizationMap = userRoleRelationService.selectGlobalUserRoleAndOrganization(userIdList); Map<String, UserTableResponse> roleAndOrganizationMap = userRoleRelationService.selectGlobalUserRoleAndOrganization(userIdList);
for (User user : userList) { for (User user : userList) {
UserInfo userInfo = new UserInfo(); UserTableResponse userInfo = new UserTableResponse();
BeanUtils.copyBean(userInfo, user); BeanUtils.copyBean(userInfo, user);
UserInfo roleOrgModel = roleAndOrganizationMap.get(user.getId()); UserTableResponse roleOrgModel = roleAndOrganizationMap.get(user.getId());
if (roleOrgModel != null) { if (roleOrgModel != null) {
userInfo.setUserRoleList(roleOrgModel.getUserRoleList()); userInfo.setUserRoleList(roleOrgModel.getUserRoleList());
userInfo.setOrganizationList(roleOrgModel.getOrganizationList()); userInfo.setOrganizationList(roleOrgModel.getOrganizationList());
@ -144,11 +150,12 @@ public class UserService {
return returnList; return returnList;
} }
public UserEditRequest updateUser(UserEditRequest userEditRequest) { public UserEditRequest updateUser(UserEditRequest userEditRequest, String operator) {
//检查用户组合法性 //检查用户组合法性
globalUserRoleService.checkRoleIsGlobalAndHaveMember(userEditRequest.getUserRoleIdList(), true); globalUserRoleService.checkRoleIsGlobalAndHaveMember(userEditRequest.getUserRoleIdList(), true);
User user = new User(); User user = new User();
BeanUtils.copyBean(user, userEditRequest); BeanUtils.copyBean(user, userEditRequest);
user.setUpdateUser(operator);
user.setUpdateTime(System.currentTimeMillis()); user.setUpdateTime(System.currentTimeMillis());
user.setCreateUser(null); user.setCreateUser(null);
user.setCreateTime(null); user.setCreateTime(null);
@ -156,4 +163,25 @@ public class UserService {
userRoleRelationService.updateUserSystemGlobalRole(user, user.getUpdateUser(), userEditRequest.getUserRoleIdList()); userRoleRelationService.updateUserSystemGlobalRole(user, user.getUpdateUser(), userEditRequest.getUserRoleIdList());
return userEditRequest; return userEditRequest;
} }
public UserEditEnableRequest updateUserEnable(UserEditEnableRequest request, String operator) {
this.checkUserInDb(request.getUserIdList());
UserExample userExample = new UserExample();
userExample.createCriteria().andIdIn(
request.getUserIdList()
);
User updateUser = new User();
updateUser.setEnable(request.isEnable());
updateUser.setUpdateUser(operator);
updateUser.setUpdateTime(System.currentTimeMillis());
userMapper.updateByExampleSelective(updateUser, userExample);
return request;
}
private void checkUserInDb(@Valid @NotEmpty List<String> userIdList) {
List<String> userInDb = baseUserMapper.selectUserIdByIdList(userIdList);
if (userIdList.size() != userInDb.size()) {
throw new MSException(Translator.get("user.not.exist"));
}
}
} }

View File

@ -3,7 +3,7 @@ package io.metersphere.system.controller;
import com.jayway.jsonpath.JsonPath; import com.jayway.jsonpath.JsonPath;
import io.metersphere.sdk.constants.SessionConstants; import io.metersphere.sdk.constants.SessionConstants;
import io.metersphere.sdk.util.JSON; import io.metersphere.sdk.util.JSON;
import io.metersphere.system.dto.UserInfo; import io.metersphere.system.dto.UserCreateInfo;
import io.metersphere.system.dto.UserRoleOption; import io.metersphere.system.dto.UserRoleOption;
import io.metersphere.system.utils.UserTestUtils; import io.metersphere.system.utils.UserTestUtils;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@ -58,11 +58,10 @@ public class UserControllerNonePermissionTests {
@Test @Test
@Order(0) @Order(0)
public void testGetGlobalSystemUserRoleSuccess() throws Exception { public void testGetGlobalSystemUserRoleSuccess() throws Exception {
UserInfo paramUserInfo = new UserInfo() {{ UserCreateInfo paramUserInfo = new UserCreateInfo() {{
setId("testId"); setId("testId");
setName("tianyang.no.permission.email"); setName("tianyang.no.permission.email");
setEmail("tianyang.no.permission.email@126.com"); setEmail("tianyang.no.permission.email@126.com");
setSource("LOCAL");
}}; }};
List<UserRoleOption> paramRoleList = new ArrayList<>() {{ List<UserRoleOption> paramRoleList = new ArrayList<>() {{
this.add( this.add(

View File

@ -1,7 +1,6 @@
package io.metersphere.system.controller; package io.metersphere.system.controller;
import base.BaseTest; import base.BaseTest;
import io.metersphere.api.domain.ApiDefinition;
import io.metersphere.sdk.constants.SessionConstants; import io.metersphere.sdk.constants.SessionConstants;
import io.metersphere.sdk.controller.handler.ResultHolder; import io.metersphere.sdk.controller.handler.ResultHolder;
import io.metersphere.sdk.dto.BasePageRequest; import io.metersphere.sdk.dto.BasePageRequest;
@ -9,10 +8,8 @@ import io.metersphere.sdk.dto.UserDTO;
import io.metersphere.sdk.util.BeanUtils; import io.metersphere.sdk.util.BeanUtils;
import io.metersphere.sdk.util.JSON; import io.metersphere.sdk.util.JSON;
import io.metersphere.sdk.util.Pager; import io.metersphere.sdk.util.Pager;
import io.metersphere.system.dto.UserBatchCreateDTO; import io.metersphere.system.dto.*;
import io.metersphere.system.dto.UserEditRequest; import io.metersphere.system.dto.response.UserTableResponse;
import io.metersphere.system.dto.UserInfo;
import io.metersphere.system.dto.UserRoleOption;
import io.metersphere.system.utils.UserTestUtils; import io.metersphere.system.utils.UserTestUtils;
import io.metersphere.utils.JsonUtils; import io.metersphere.utils.JsonUtils;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@ -53,12 +50,13 @@ public class UserControllerTests extends BaseTest {
private static final String URL_USER_GET = "/system/user/get/%s"; private static final String URL_USER_GET = "/system/user/get/%s";
private static final String URL_USER_PAGE = "/system/user/page"; private static final String URL_USER_PAGE = "/system/user/page";
private static final String URL_GET_GLOBAL_SYSTEM = "/system/user/get/global/system/role"; private static final String URL_GET_GLOBAL_SYSTEM = "/system/user/get/global/system/role";
private static final String URL_USER_UPDATE_ENABLE = "/system/user/update/enable";
//失败请求返回编码 //失败请求返回编码
private static final ResultMatcher BAD_REQUEST_MATCHER = status().isBadRequest(); private static final ResultMatcher BAD_REQUEST_MATCHER = status().isBadRequest();
private static final ResultMatcher ERROR_REQUEST_MATCHER = status().is5xxServerError(); private static final ResultMatcher ERROR_REQUEST_MATCHER = status().is5xxServerError();
//测试过程中需要用到的数据 //测试过程中需要用到的数据
private static final List<UserInfo> USER_LIST = new ArrayList<>(); private static final List<UserCreateInfo> USER_LIST = new ArrayList<>();
private static List<UserRoleOption> defaultUserRoleList = new ArrayList<>(); private static final List<UserRoleOption> defaultUserRoleList = new ArrayList<>();
//默认数据 //默认数据
public static final String USER_DEFAULT_NAME = "tianyang.no.1"; public static final String USER_DEFAULT_NAME = "tianyang.no.1";
public static final String USER_DEFAULT_EMAIL = "tianyang.no.1@126.com"; public static final String USER_DEFAULT_EMAIL = "tianyang.no.1@126.com";
@ -138,15 +136,13 @@ public class UserControllerTests extends BaseTest {
UserBatchCreateDTO userMaintainRequest = UserTestUtils.getUserCreateDTO( UserBatchCreateDTO userMaintainRequest = UserTestUtils.getUserCreateDTO(
defaultUserRoleList, defaultUserRoleList,
new ArrayList<>() {{ new ArrayList<>() {{
add(new UserInfo() {{ add(new UserCreateInfo() {{
setName(USER_DEFAULT_NAME); setName(USER_DEFAULT_NAME);
setEmail(USER_DEFAULT_EMAIL); setEmail(USER_DEFAULT_EMAIL);
setSource("LOCAL");
}}); }});
add(new UserInfo() {{ add(new UserCreateInfo() {{
setName("tianyang.no.2"); setName("tianyang.no.2");
setEmail("tianyang.no.2@126.com"); setEmail("tianyang.no.2@126.com");
setSource("LOCAL");
}}); }});
}} }}
); );
@ -158,15 +154,13 @@ public class UserControllerTests extends BaseTest {
defaultUserRoleList, defaultUserRoleList,
new ArrayList<>() {{ new ArrayList<>() {{
add(new UserInfo() {{ add(new UserCreateInfo() {{
setName("tianyang.repeat"); setName("tianyang.repeat");
setEmail("tianyang.repeat.name.1@126.com"); setEmail("tianyang.repeat.name.1@126.com");
setSource("LOCAL");
}}); }});
add(new UserInfo() {{ add(new UserCreateInfo() {{
setName("tianyang.repeat"); setName("tianyang.repeat");
setEmail("tianyang.repeat.name.2@126.com"); setEmail("tianyang.repeat.name.2@126.com");
setSource("LOCAL");
}}); }});
}} }}
); );
@ -181,16 +175,14 @@ public class UserControllerTests extends BaseTest {
this.testGetGlobalSystemUserRoleSuccess(); this.testGetGlobalSystemUserRoleSuccess();
} }
UserBatchCreateDTO userMaintainRequest; UserBatchCreateDTO userMaintainRequest;
List<UserInfo> errorUserList = new ArrayList<>() {{ List<UserCreateInfo> errorUserList = new ArrayList<>() {{
add(new UserInfo() {{ add(new UserCreateInfo() {{
setName("tianyang.error.1"); setName("tianyang.error.1");
setEmail("tianyang.error.name.1@126.com"); setEmail("tianyang.error.name.1@126.com");
setSource("LOCAL");
}}); }});
add(new UserInfo() {{ add(new UserCreateInfo() {{
setName("tianyang.error.2"); setName("tianyang.error.2");
setEmail("tianyang.error.name.2@126.com"); setEmail("tianyang.error.name.2@126.com");
setSource("LOCAL");
}}); }});
}}; }};
@ -224,9 +216,8 @@ public class UserControllerTests extends BaseTest {
defaultUserRoleList, defaultUserRoleList,
new ArrayList<>() new ArrayList<>()
); );
userMaintainRequest.getUserInfoList().add(new UserInfo() {{ userMaintainRequest.getUserInfoList().add(new UserCreateInfo() {{
setEmail("tianyang.name.empty@126.com"); setEmail("tianyang.name.empty@126.com");
setSource("LOCAL");
}}); }});
this.requestPost(URL_USER_CREATE, userMaintainRequest, BAD_REQUEST_MATCHER); this.requestPost(URL_USER_CREATE, userMaintainRequest, BAD_REQUEST_MATCHER);
//含有用户邮箱为空的数据 //含有用户邮箱为空的数据
@ -234,9 +225,8 @@ public class UserControllerTests extends BaseTest {
defaultUserRoleList, defaultUserRoleList,
new ArrayList<>() new ArrayList<>()
); );
userMaintainRequest.getUserInfoList().add(new UserInfo() {{ userMaintainRequest.getUserInfoList().add(new UserCreateInfo() {{
setName("tianyang.email.empty"); setName("tianyang.email.empty");
setSource("LOCAL");
}}); }});
this.requestPost(URL_USER_CREATE, userMaintainRequest, BAD_REQUEST_MATCHER); this.requestPost(URL_USER_CREATE, userMaintainRequest, BAD_REQUEST_MATCHER);
//用户邮箱不符合标准 //用户邮箱不符合标准
@ -244,23 +234,11 @@ public class UserControllerTests extends BaseTest {
defaultUserRoleList, defaultUserRoleList,
new ArrayList<>() new ArrayList<>()
); );
userMaintainRequest.getUserInfoList().add(new UserInfo() {{ userMaintainRequest.getUserInfoList().add(new UserCreateInfo() {{
setName("用户邮箱放飞自我"); setName("用户邮箱放飞自我");
setEmail("用户邮箱放飞自我"); setEmail("用户邮箱放飞自我");
setSource("LOCAL");
}}); }});
this.requestPost(URL_USER_CREATE, userMaintainRequest, BAD_REQUEST_MATCHER); this.requestPost(URL_USER_CREATE, userMaintainRequest, BAD_REQUEST_MATCHER);
//用户来源为空
userMaintainRequest = UserTestUtils.getUserCreateDTO(
defaultUserRoleList,
new ArrayList<>()
);
userMaintainRequest.getUserInfoList().add(new UserInfo() {{
setName("tianyang.source.empty");
setEmail("tianyang.source.empty@126.com");
}});
this.requestPost(URL_USER_CREATE, userMaintainRequest, BAD_REQUEST_MATCHER);
/* /*
* 校验业务判断出错的反例 500 error) * 校验业务判断出错的反例 500 error)
* 需要保证数据库有正常数据 * 需要保证数据库有正常数据
@ -277,10 +255,9 @@ public class UserControllerTests extends BaseTest {
errorUserList errorUserList
); );
String firstUserEmail = userMaintainRequest.getUserInfoList().get(0).getEmail(); String firstUserEmail = userMaintainRequest.getUserInfoList().get(0).getEmail();
userMaintainRequest.getUserInfoList().add(new UserInfo() {{ userMaintainRequest.getUserInfoList().add(new UserCreateInfo() {{
setName("tianyang.no.error4"); setName("tianyang.no.error4");
setEmail(firstUserEmail); setEmail(firstUserEmail);
setSource("LOCAL");
}}); }});
this.requestPost(URL_USER_CREATE, userMaintainRequest, ERROR_REQUEST_MATCHER); this.requestPost(URL_USER_CREATE, userMaintainRequest, ERROR_REQUEST_MATCHER);
//测试请求参数中含有数据库中已存在的邮箱情况 //测试请求参数中含有数据库中已存在的邮箱情况
@ -290,10 +267,9 @@ public class UserControllerTests extends BaseTest {
); );
userMaintainRequest.setUserInfoList( userMaintainRequest.setUserInfoList(
new ArrayList<>() {{ new ArrayList<>() {{
add(new UserInfo() {{ add(new UserCreateInfo() {{
setName("tianyang.repeat.email.db"); setName("tianyang.repeat.email.db");
setEmail(USER_DEFAULT_EMAIL); setEmail(USER_DEFAULT_EMAIL);
setSource("LOCAL");
}}); }});
}} }}
); );
@ -354,13 +330,13 @@ public class UserControllerTests extends BaseTest {
ResultHolder resultHolder = JsonUtils.parseObject(returnData, ResultHolder.class); ResultHolder resultHolder = JsonUtils.parseObject(returnData, ResultHolder.class);
//返回请求正常 //返回请求正常
Assertions.assertNotNull(resultHolder); Assertions.assertNotNull(resultHolder);
Pager<UserInfo> returnPager = JSON.parseObject(JSON.toJSONString(resultHolder.getData()), Pager.class); Pager<?> returnPager = JSON.parseObject(JSON.toJSONString(resultHolder.getData()), Pager.class);
//返回值不为空 //返回值不为空
Assertions.assertNotNull(returnPager); Assertions.assertNotNull(returnPager);
//返回值的页码和当前页码相同 //返回值的页码和当前页码相同
Assertions.assertEquals(returnPager.getCurrent(), basePageRequest.getCurrent()); Assertions.assertEquals(returnPager.getCurrent(), basePageRequest.getCurrent());
//返回的数据量不超过规定要返回的数据量相同 //返回的数据量不超过规定要返回的数据量相同
Assertions.assertTrue(((List<ApiDefinition>) returnPager.getList()).size() <= basePageRequest.getPageSize()); Assertions.assertTrue(JSON.parseArray(JSON.toJSONString(returnPager.getList())).size() <= basePageRequest.getPageSize());
//测试根据创建时间倒叙排列 //测试根据创建时间倒叙排列
basePageRequest = UserTestUtils.getDefaultPageRequest(); basePageRequest = UserTestUtils.getDefaultPageRequest();
@ -372,9 +348,9 @@ public class UserControllerTests extends BaseTest {
resultHolder = JsonUtils.parseObject(returnData, ResultHolder.class); resultHolder = JsonUtils.parseObject(returnData, ResultHolder.class);
returnPager = JSON.parseObject(JSON.toJSONString(resultHolder.getData()), Pager.class); returnPager = JSON.parseObject(JSON.toJSONString(resultHolder.getData()), Pager.class);
//第一个数据的createTime是最大的 //第一个数据的createTime是最大的
List<UserInfo> userInfoList = JSON.parseArray(JSON.toJSONString(returnPager.getList()), UserInfo.class); List<UserTableResponse> userInfoList = JSON.parseArray(JSON.toJSONString(returnPager.getList()), UserTableResponse.class);
long firstCreateTime = userInfoList.get(0).getCreateTime(); long firstCreateTime = userInfoList.get(0).getCreateTime();
for (UserInfo userInfo : userInfoList) { for (UserTableResponse userInfo : userInfoList) {
Assertions.assertFalse(userInfo.getCreateTime() > firstCreateTime); Assertions.assertFalse(userInfo.getCreateTime() > firstCreateTime);
} }
} }
@ -404,7 +380,7 @@ public class UserControllerTests extends BaseTest {
@Order(4) @Order(4)
public void testUserUpdateSuccess() throws Exception { public void testUserUpdateSuccess() throws Exception {
this.checkUserList(); this.checkUserList();
UserInfo user = new UserInfo(); UserCreateInfo user = new UserCreateInfo();
BeanUtils.copyBean(user, USER_LIST.get(0)); BeanUtils.copyBean(user, USER_LIST.get(0));
UserEditRequest userMaintainRequest; UserEditRequest userMaintainRequest;
UserEditRequest response; UserEditRequest response;
@ -440,7 +416,7 @@ public class UserControllerTests extends BaseTest {
checkDTO = this.getUserByEmail(user.getEmail()); checkDTO = this.getUserByEmail(user.getEmail());
UserTestUtils.compareUserDTO(response, checkDTO); UserTestUtils.compareUserDTO(response, checkDTO);
//用户信息复原 //用户信息复原
user = new UserInfo(); user = new UserCreateInfo();
BeanUtils.copyBean(user, USER_LIST.get(0)); BeanUtils.copyBean(user, USER_LIST.get(0));
userMaintainRequest = UserTestUtils.getUserUpdateDTO(user, defaultUserRoleList); userMaintainRequest = UserTestUtils.getUserUpdateDTO(user, defaultUserRoleList);
response = UserTestUtils.parseObjectFromMvcResult(this.responsePost(URL_USER_UPDATE, userMaintainRequest), UserEditRequest.class); response = UserTestUtils.parseObjectFromMvcResult(this.responsePost(URL_USER_UPDATE, userMaintainRequest), UserEditRequest.class);
@ -452,7 +428,7 @@ public class UserControllerTests extends BaseTest {
@Order(5) @Order(5)
public void testUserUpdateError() throws Exception { public void testUserUpdateError() throws Exception {
// 4xx 验证 // 4xx 验证
UserInfo user = new UserInfo(); UserCreateInfo user = new UserCreateInfo();
UserEditRequest userMaintainRequest; UserEditRequest userMaintainRequest;
//更改名字 //更改名字
BeanUtils.copyBean(user, USER_LIST.get(0)); BeanUtils.copyBean(user, USER_LIST.get(0));
@ -472,11 +448,12 @@ public class UserControllerTests extends BaseTest {
//用户组为空 //用户组为空
BeanUtils.copyBean(user, USER_LIST.get(0)); BeanUtils.copyBean(user, USER_LIST.get(0));
userMaintainRequest = UserTestUtils.getUserUpdateDTO(user, new ArrayList<>()); userMaintainRequest = UserTestUtils.getUserUpdateDTO(user, new ArrayList<>());
userMaintainRequest.setUserRoleList(new ArrayList<>()); userMaintainRequest.setUserRoleIdList(new ArrayList<>());
this.requestPost(URL_USER_UPDATE, userMaintainRequest, BAD_REQUEST_MATCHER); this.requestPost(URL_USER_UPDATE, userMaintainRequest, BAD_REQUEST_MATCHER);
// 500验证 // 500验证
//邮箱重复 //邮箱重复
this.checkUserList();
BeanUtils.copyBean(user, USER_LIST.get(0)); BeanUtils.copyBean(user, USER_LIST.get(0));
user.setEmail(USER_LIST.get(USER_LIST.size() - 1).getEmail()); user.setEmail(USER_LIST.get(USER_LIST.size() - 1).getEmail());
userMaintainRequest = UserTestUtils.getUserUpdateDTO(user, defaultUserRoleList); userMaintainRequest = UserTestUtils.getUserUpdateDTO(user, defaultUserRoleList);
@ -488,4 +465,35 @@ public class UserControllerTests extends BaseTest {
); );
this.requestPost(URL_USER_UPDATE, userMaintainRequest, ERROR_REQUEST_MATCHER); this.requestPost(URL_USER_UPDATE, userMaintainRequest, ERROR_REQUEST_MATCHER);
} }
@Test
@Order(6)
public void testUserChangeEnableSuccess() throws Exception {
this.checkUserList();
//单独修改状态
UserCreateInfo userInfo = USER_LIST.get(0);
UserEditEnableRequest userChangeEnableRequest = new UserEditEnableRequest();
userChangeEnableRequest.setUserIdList(new ArrayList<>() {{
this.add(userInfo.getId());
}});
userChangeEnableRequest.setEnable(false);
this.requestPost(URL_USER_UPDATE_ENABLE, userChangeEnableRequest, status().isOk());
UserDTO userDTO = this.getUserByEmail(userInfo.getEmail());
Assertions.assertEquals(userDTO.getEnable(), userChangeEnableRequest.isEnable());
}
@Test
@Order(6)
public void testUserChangeEnableError() throws Exception {
this.checkUserList();
//用户不存在
UserEditEnableRequest userChangeEnableRequest = new UserEditEnableRequest();
userChangeEnableRequest.setEnable(false);
this.requestPost(URL_USER_UPDATE_ENABLE, userChangeEnableRequest, BAD_REQUEST_MATCHER);
//含有非法用户
userChangeEnableRequest.setUserIdList(new ArrayList<>() {{
this.add("BCDEDIT");
}});
this.requestPost(URL_USER_UPDATE_ENABLE, userChangeEnableRequest, ERROR_REQUEST_MATCHER);
}
} }

View File

@ -7,8 +7,8 @@ import io.metersphere.sdk.util.BeanUtils;
import io.metersphere.sdk.util.JSON; import io.metersphere.sdk.util.JSON;
import io.metersphere.system.domain.UserRole; import io.metersphere.system.domain.UserRole;
import io.metersphere.system.dto.UserBatchCreateDTO; import io.metersphere.system.dto.UserBatchCreateDTO;
import io.metersphere.system.dto.UserCreateInfo;
import io.metersphere.system.dto.UserEditRequest; import io.metersphere.system.dto.UserEditRequest;
import io.metersphere.system.dto.UserInfo;
import io.metersphere.system.dto.UserRoleOption; import io.metersphere.system.dto.UserRoleOption;
import io.metersphere.utils.JsonUtils; import io.metersphere.utils.JsonUtils;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
@ -36,7 +36,7 @@ public class UserTestUtils {
public static UserBatchCreateDTO getUserCreateDTO( public static UserBatchCreateDTO getUserCreateDTO(
List<UserRoleOption> userRoleList, List<UserRoleOption> userRoleList,
List<UserInfo> userInfoList) { List<UserCreateInfo> userInfoList) {
UserBatchCreateDTO userMaintainRequest = new UserBatchCreateDTO(); UserBatchCreateDTO userMaintainRequest = new UserBatchCreateDTO();
if (CollectionUtils.isNotEmpty(userRoleList)) { if (CollectionUtils.isNotEmpty(userRoleList)) {
userMaintainRequest.setUserRoleIdList( userMaintainRequest.setUserRoleIdList(
@ -46,7 +46,7 @@ public class UserTestUtils {
return userMaintainRequest; return userMaintainRequest;
} }
public static UserEditRequest getUserUpdateDTO(UserInfo user, List<UserRoleOption> userRoleList) { public static UserEditRequest getUserUpdateDTO(UserCreateInfo user, List<UserRoleOption> userRoleList) {
UserEditRequest returnDTO = new UserEditRequest(); UserEditRequest returnDTO = new UserEditRequest();
if (user.getPhone() == null) { if (user.getPhone() == null) {
user.setPhone(""); user.setPhone("");