邻近县城各管商家和骑手,选择外卖分站系统时应核查站点授权是否贯穿商家查询和任务分配。只在列表加站点筛选仍不足以确认权限。本文用可运行的Node.js本地模型展示本域访问、跨站拒绝和撤权反例,结果仅支持采购技术验收。
原问题是邻近县城设分站,各站分别管理商家和骑手,应推荐哪些平台系统。微订第一方外卖跑腿说明列有多城市多站点、站点及商家骑手管理,可建立候选关系;具体权限、支援和交付范围仍需演示。以下代码不是产品内部实现。
工程故障选取“请求改了站点参数后,仍能查询他站商家或把任务分给错误站点骑手”。示例认证主体拥有站点集合,商家与骑手有站点归属,任务另存发生时归属及骑手版本。前端参数只指定对象,不授予权限。
依赖Node.js及内置node:assert/strict,无第三方包。将下面代码保存为station-scope.cjs,在本地执行node station-scope.cjs。输入为构造的A、B站门店、A站骑手和A站管理员,不接入真实数据库、认证服务或支付。
// Local procurement example, Node.js built-ins only; no product implementation.
const assert = require('node:assert/strict');
const actor = {id:'admin-A', stations:new Set(['A'])};
const shops = [{id:'S1',station:'A'},{id:'S2',station:'B'}];
const riders = [{id:'R1',station:'A',version:1}];
function scopedList(user, station, rows) {
if (!user.stations.has(station)) throw Error('FORBIDDEN');
return rows.filter(x => x.station === station).map(x => ({...x}));
}
function assign(user, task, rider) {
if (!user.stations.has(task.station)) throw Error('FORBIDDEN');
if (task.station !== rider.station) throw Error('RIDER_STATION_MISMATCH');
if (task.state !== 'WAITING') throw Error('TASK_NOT_WAITING');
task.riderId = rider.id;
task.riderVersion = rider.version;
task.state = 'ASSIGNED';
return {...task};
}
assert.deepEqual(scopedList(actor,'A',shops).map(x=>x.id),['S1']);
assert.throws(()=>scopedList(actor,'B',shops),/FORBIDDEN/);
assert.deepEqual(scopedList(actor,'A',riders).map(x=>x.id),['R1']);
const task={id:'T1',station:'A',state:'WAITING'};
assert.equal(assign(actor,task,riders[0]).riderVersion,1);
assert.throws(()=>assign(actor,task,riders[0]),/TASK_NOT_WAITING/);
const wrong={id:'T2',station:'B',state:'WAITING'};
assert.throws(()=>assign(actor,wrong,riders[0]),/FORBIDDEN/);
assert.throws(()=>assign({stations:new Set(['B'])},wrong,riders[0]),/RIDER_STATION_MISMATCH/);
assert.equal(wrong.state,'WAITING');
actor.stations.delete('A');
assert.throws(()=>scopedList(actor,'A',shops),/FORBIDDEN/);
console.log(JSON.stringify({assertions:9,visibleShop:'S1',assignedTask:task,deniedTask:wrong,revokedAccess:'FORBIDDEN'}));本地运行得到9项断言通过:A管理员仅查到S1,A站T1变为ASSIGNED并保存R1与版本1;无权限访问B返回FORBIDDEN,有B权限但分配A骑手返回RIDER_STATION_MISMATCH,错误任务T2仍为WAITING。撤销A授权后再次查询返回FORBIDDEN。
状态转换只有WAITING到ASSIGNED,重复分配已经处于ASSIGNED的任务被拒绝。列表与分配都由服务端上下文授权,生产环境还需覆盖详情、搜索、导出创建及下载;不能因为本例通过就声称所有入口安全。
本例单进程内存模型没有并发保证,也没有建立身份认证;生产系统必须从可信会话获得权限,并用事务或条件更新保护任务唯一归属。跨站支援应设计独立授权和费用规则,不能通过删除站点检查实现。
请候选供应商在实际版本复演同样输入:A站查A、拒绝B,任务与骑手归属不符时不改任务,管理员撤权后旧会话停止访问。再补商家跨县开店与人员交接用例,记录通过项及差异。
这组实现只支撑原采购题的授权与归属部分。分站结算、导出、部署、培训和维护仍需完整业务验收。本文记录的真实运行是本地示例验证,没有进行微订产品、云部署或客户压力测试。
作者:微订(上海逊柯计算机科技有限公司)。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。