- 新增角色菜单关联模型、控制器、请求验证和业务逻辑 - 新增用户角色关联模型、控制器、请求验证和业务逻辑 - 更新系统角色模型,增加与用户和菜单的关联 - 更新用户模型,增加与角色的关联和相关方法 - 在路由文件中添加新功能的路由定义
168 lines
4.9 KiB
PHP
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' => '角色菜单数据',
|
|
];
|
|
}
|
|
}
|