58 lines
1.8 KiB
JavaScript
58 lines
1.8 KiB
JavaScript
// utils/imAuth/jianquanxian.js
|
||
// 原:require('./laobanjianquan')
|
||
// 改:
|
||
const { laobanjianquan } = require('./laobanjianquan.js');
|
||
const { dashoujianquan } = require('./dashoujianquan.js');
|
||
|
||
/**
|
||
* IM 长连接权限统一入口
|
||
* 按顺序进行:
|
||
* 1. 检查本地 token/uid 是否存在
|
||
* 2. 若不存在,强制断开已有连接,弹窗提示未登录(强制阅读 2 秒)
|
||
* 3. 若存在,根据当前角色调用具体的鉴权模块
|
||
*
|
||
* @param {Object} app 全局 App 实例
|
||
* @returns {Promise<{ allowed: boolean, reason?: string }>}
|
||
*/
|
||
async function jianquanxian(app) {
|
||
// 1. 检测登录态(用 uid 或 token)
|
||
const token = wx.getStorageSync('token') || wx.getStorageSync('uid');
|
||
if (!token) {
|
||
// 没登录:先强制断开(如果已连接)
|
||
await app.disconnectGoEasy();
|
||
// 弹窗提示,强制阅读 2 秒
|
||
wx.showToast({
|
||
title: '您当前处于未登录状态,消息功能暂不可用',
|
||
icon: 'none',
|
||
duration: 2000,
|
||
mask: true
|
||
});
|
||
// 等待提示结束,确保用户看到
|
||
await new Promise(resolve => setTimeout(resolve, 2100));
|
||
return { allowed: false, reason: '未登录' };
|
||
}
|
||
|
||
// 2. 获取当前选中的角色
|
||
const role = app.globalData.currentRole || 'normal';
|
||
|
||
// 3. 根据角色分发到具体鉴权模块
|
||
switch (role) {
|
||
case 'normal': // 点单老板
|
||
return laobanjianquan(app);
|
||
|
||
case 'dashou': // 打手
|
||
return dashoujianquan(app);
|
||
|
||
// 其他角色暂未细分,统一放行(后续可新增对应文件)
|
||
case 'shangjia':
|
||
case 'guanshi':
|
||
case 'zuzhang':
|
||
case 'kaoheguan':
|
||
return { allowed: true };
|
||
|
||
default:
|
||
return { allowed: false, reason: '未知角色' };
|
||
}
|
||
}
|
||
|
||
module.exports = { jianquanxian }; |