route()->getActionMethod(); return match($action) { 'list' => $this->listRules(), 'getRoleMenus' => $this->getRoleMenusRules(), 'getMenuRoles' => $this->getMenuRolesRules(), 'getRoleMenuTree' => $this->getRoleMenuTreeRules(), 'setRoleMenus' => $this->setRoleMenusRules(), 'batchSetRoleMenus' => $this->batchSetRoleMenusRules(), 'clearRoleMenus' => $this->clearRoleMenusRules(), 'clearMenuRoles' => $this->clearMenuRolesRules(), default => [] }; } /** * 获取分页验证规则 */ private function getPaginationRules(): array { return [ 'page' => ['sometimes', 'integer', 'min:1'], 'page_size' => ['sometimes', 'integer', 'min:1', 'max:100'], ]; } /** * 列表查询验证规则 */ private function listRules(): array { return array_merge($this->getPaginationRules(), [ 'role_id' => ['sometimes', 'integer', 'exists:system_role,id'], 'menu_id' => ['sometimes', 'integer', 'exists:system_menu,id'], ]); } /** * 获取角色菜单验证规则 */ private function getRoleMenusRules(): array { return [ 'role_id' => ['required', 'integer', 'exists:system_role,id'], ]; } /** * 获取菜单角色验证规则 */ private function getMenuRolesRules(): array { return [ 'menu_id' => ['required', 'integer', 'exists:system_menu,id'], ]; } /** * 获取角色菜单树验证规则 */ private function getRoleMenuTreeRules(): array { return [ 'role_id' => ['required', 'integer', 'exists:system_role,id'], ]; } /** * 设置角色菜单验证规则 */ private function setRoleMenusRules(): array { return [ 'role_id' => ['required', 'integer', 'exists:system_role,id'], 'menu_ids' => ['sometimes', 'array'], 'menu_ids.*' => ['integer', 'exists:system_menu,id'], ]; } /** * 批量设置角色菜单验证规则 */ private function batchSetRoleMenusRules(): array { return [ 'role_menu_data' => ['required', 'array', 'min:1'], 'role_menu_data.*.role_id' => ['required', 'integer', 'exists:system_role,id'], 'role_menu_data.*.menu_ids' => ['sometimes', 'array'], 'role_menu_data.*.menu_ids.*' => ['integer', 'exists:system_menu,id'], ]; } /** * 清除角色菜单验证规则 */ private function clearRoleMenusRules(): array { return [ 'role_id' => ['required', 'integer', 'exists:system_role,id'], ]; } /** * 清除菜单角色验证规则 */ private function clearMenuRolesRules(): array { return [ 'menu_id' => ['required', 'integer', 'exists:system_menu,id'], ]; } /** * 获取验证错误消息 */ protected function getSpecificMessages(): array { return [ 'role_id.required' => '角色ID不能为空', 'role_id.integer' => '角色ID必须是整数', 'role_id.exists' => '指定的角色不存在', 'menu_id.required' => '菜单ID不能为空', 'menu_id.integer' => '菜单ID必须是整数', 'menu_id.exists' => '指定的菜单不存在', 'menu_ids.array' => '菜单ID列表必须是数组', 'menu_ids.*.integer' => '菜单ID必须是整数', 'menu_ids.*.exists' => '指定的菜单不存在', 'role_menu_data.required' => '角色菜单数据不能为空', 'role_menu_data.array' => '角色菜单数据必须是数组', 'role_menu_data.min' => '至少需要一组角色菜单数据', 'role_menu_data.*.role_id.required' => '角色ID不能为空', 'role_menu_data.*.role_id.integer' => '角色ID必须是整数', 'role_menu_data.*.role_id.exists' => '指定的角色不存在', 'role_menu_data.*.menu_ids.array' => '菜单ID列表必须是数组', 'role_menu_data.*.menu_ids.*.integer' => '菜单ID必须是整数', 'role_menu_data.*.menu_ids.*.exists' => '指定的菜单不存在', ]; } /** * 字段别名 */ public function attributes(): array { return [ 'role_id' => '角色', 'menu_id' => '菜单', 'menu_ids' => '菜单列表', 'role_menu_data' => '角色菜单数据', ]; } }