study-api-v2/app/Http/Requests/Admin/System/SystemRoleMenuRequest.php
hx a621de91ff feat(system): 添加系统菜单、角色菜单关联和用户角色关联功能- 新增系统菜单模型、控制器、请求验证和业务逻辑
- 新增角色菜单关联模型、控制器、请求验证和业务逻辑
- 新增用户角色关联模型、控制器、请求验证和业务逻辑
- 更新系统角色模型,增加与用户和菜单的关联
- 更新用户模型,增加与角色的关联和相关方法
- 在路由文件中添加新功能的路由定义
2025-07-15 01:14:15 +08:00

168 lines
4.9 KiB
PHP

<?php
namespace App\Http\Requests\Admin\System;
use App\Http\Requests\BaseRequest;
/**
* 系统角色菜单关联请求验证
*/
class SystemRoleMenuRequest extends BaseRequest
{
/**
* 获取特定验证规则
*/
protected function getSpecificRules(): array
{
$action = $this->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' => '角色菜单数据',
];
}
}