前情回顾与本节目标
在上一讲中,我们完成了页面管理与角色权限的分配。至此,系统的'骨架'和'规则'已经搭建完毕。
本节我们将正式打通用户登录与鉴权闭环。为了最大化提升开发效率,我们将直接启用云开发的'手机号验证码登录'功能。当用户通过身份验证进入门户页时,我们再根据其手机号拉取完整的组织架构和权限信息,实现千人千面的工作台入口控制。
本节核心目标:
- 拥抱云原生认证:基于云开发内置的
$w.auth.currentUser获取已登录用户的手机号。 - 构造全局 User 对象:在门户页初始化时,聚合用户的部门、岗位、角色与权限信息。
- 门户权限路由:根据构建好的 User 对象中的角色信息,动态控制各业务门户的入口可用性及跳转。
[图片]
第一步:数据与变量准备
为了不偏离核心,这里仅重点列出本节直接相关的核心数据模型。
1.1 数据源配置
确保系统中已存在以下核心表(部门、岗位、角色等表已在前几篇中创建完毕):
1. Users 表(用户信息表)
| 核心字段 | 标识 | 类型 | 说明 |
|---|---|---|---|
| 姓名 / 手机号 | name / phone | 单行文本 | 手机号作为与云开发认证绑定的唯一标识 |
| 部门 / 岗位 | dept_id / post_id | 关联关系 | 关联 Departments 和 Posts 表 |
| 最后登录 | last_login | 日期时间 | 门户初始化时自动更新 |
2. UserRoles 表(用户 - 角色关联表)
用于多对多映射:包含 user_id(关联 Users 表)和 role_id(关联 Roles 表)。
1.2 门户页变量设置
在首页中创建以下全局变量,用于承载全局数据:
currentUser(对象,{}):存储当前用户基础信息及部门、岗位。userRoles(数组,[]):存储当前用户的角色编码集合,用于判断门户入口权限。
[图片]
[图片]
第二步:门户页初始化与 User 对象构造
因为云开发已经帮我们挡住了未登录用户,所以只要能进入门户页,就说明用户已经通过了手机号验证。
在全局中创建登录方法 login。
[图片]
export default async function login({ event, data }) {
try {
$w.utils.showLoading({ : });
phone = $w..?. || ;
(!phone) {
$w..({ : , : });
}
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..();
}
}


