系统骨架和角色权限已经就绪,这一节直接把登录鉴权闭环打通。为了方便,直接启用云开发的手机号验证码登录——用户通过认证进入门户页后,我们再根据手机号拉取组织架构和权限信息,然后按角色控制不同工作台的入口。
[图片]
数据模型与变量
只列出本节直接相关的表,部门和岗位等其他表前面已经建好。
1. Users 表(用户信息表)
| 核心字段 | 标识 | 类型 | 说明 |
|---|---|---|---|
| 姓名 / 手机号 | name / phone | 单行文本 | 手机号与云开发认证绑定的唯一标识 |
| 部门 / 岗位 | dept_id / post_id | 关联关系 | 关联 Departments 和 Posts 表 |
| 最后登录 | last_login | 日期时间 | 门户初始化时自动更新 |
2. UserRoles 表(用户 - 角色关联表)
多对多映射:包含 user_id(关联 Users 表)和 role_id(关联 Roles 表)。
在首页中创建两个全局变量:currentUser(存储用户基础信息及部门、岗位)和 userRoles(存储角色编码集合),初始值分别是空对象和空数组。
[图片]
[图片]
门户初始化:构造 User 对象
云开发已经拦截了未登录用户,所以能进到门户页就说明手机号验证通过了。在全局方法 login 里完成剩下的工作。
[图片]
export default async function login({ event, data }) {
try {
$w.utils.showLoading({ title: '加载工作台中...' });
// 1. 从云开发原生 auth 对象获取当前手机号
const phone = $w.auth.currentUser?.phone || "15155667788";
if (!phone) {
return $w.utils.showToast({ title: '获取授权信息失败,请重新登录', icon: });
}
userRes = $w..({
: ,
: ,
: {
: { : { : { : phone } } },
: { : , : , : }
}
});
(!userRes..) {
$w..({ : , : });
}
user = userRes.[];
.(, user);
$w..({
: ,
: ,
: {
: { : .() },
: { : { : { : user. } } }
}
}).( .(, e));
roleRes = $w..({
: ,
: ,
: {
: { : { : { : user. } } },
: { : , : }
}
});
.(, roleRes);
roleCodes = roleRes..( item.?.).();
.(, roleCodes);
userInfo = { ...user, : user., : user. };
$w.... = userInfo;
$w.... = roleCodes;
} (e) {
.(, e);
$w..({ : , : });
} {
$w..();
}
}


