Files
x-server-mobile/backend/app/controller/UserController.php
T
root 2e5f570b40 feat: 完善鉴权和密码功能,添加飞书通知模块
- 完善Token过期/不存在时跳转登录重新认证
- 实现正常的账号密码登录验证(邮箱/手机号+密码)
- 用户初始化密码设为工号(sn)
- 添加修改密码功能(API+前端页面)
- 修复扫码登录后跳转问题(zustand persist格式)
- 创建飞书通知服务 FeishuNotificationService
- 设置页面添加修改密码入口

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 15:19:37 +08:00

134 lines
3.3 KiB
PHP

<?php
namespace app\controller;
use app\model\User;
use Webman\Http\Request;
use Webman\Http\Response;
class UserController extends BaseController
{
/**
* 获取用户信息
*/
public function info(Request $request): Response
{
$userId = $this->getUserId($request);
$user = User::find($userId);
if (!$user) {
return $this->error('用户不存在');
}
return $this->success($user);
}
/**
* 获取用户菜单权限
*/
public function menu(Request $request): Response
{
// TODO: 根据用户权限返回菜单
return $this->success([
['id' => 1, 'name' => '首页', 'path' => '/dashboard'],
['id' => 2, 'name' => '出差审批', 'path' => '/business-trip'],
]);
}
/**
* 获取用户可切换的公司列表
*/
public function companies(Request $request): Response
{
$userId = $this->getUserId($request);
// TODO: 从数据库获取用户关联的公司列表
return $this->success([
['id' => 1, 'name' => '公司A'],
]);
}
/**
* 切换当前公司
*/
public function switchCompany(Request $request): Response
{
$companyId = $request->post('company_id');
// TODO: 更新用户当前公司
return $this->success();
}
/**
* 修改密码
*/
public function changePassword(Request $request): Response
{
$userId = $this->getUserId($request);
$user = User::find($userId);
if (!$user) {
return $this->error('用户不存在');
}
$oldPassword = $request->post('old_password');
$newPassword = $request->post('new_password');
$confirmPassword = $request->post('confirm_password');
// 验证参数
if (!$oldPassword || !$newPassword || !$confirmPassword) {
return $this->error('请填写完整信息');
}
if (strlen($newPassword) < 6) {
return $this->error('新密码长度不能少于6位');
}
if ($newPassword !== $confirmPassword) {
return $this->error('两次输入的密码不一致');
}
// 验证旧密码
if ($user->password && !password_verify($oldPassword, $user->password)) {
return $this->error('原密码错误');
}
// 更新密码
$user->password = password_hash($newPassword, PASSWORD_DEFAULT);
$user->save();
return $this->success(null, '密码修改成功');
}
/**
* 获取用户列表(用于选择审批人等)
*/
public function list(Request $request): Response
{
$userId = $this->getUserId($request);
$keyword = $request->get('keyword', '');
$page = (int) $request->get('page', 1);
$pageSize = (int) $request->get('page_size', 50);
$query = User::active();
if ($keyword) {
$query->search($keyword);
}
$total = $query->count();
$list = $query->orderBy('id')
->offset(($page - 1) * $pageSize)
->limit($pageSize)
->get();
return $this->success([
'list' => $list,
'total' => $total,
'page' => $page,
'page_size' => $pageSize,
]);
}
}