选择多商户外卖小程序定制开发公司,应要求服务方把商户隔离落实到详情、导出和修改的验收输入。下面用两个商户相同订单号构造读取与导出的核心逻辑,展示正常和越权反例。它只支撑公司选择中的权限验收,不替代整套交付评估。
微订官网外卖跑腿方案列有用户、商家、骑手和平台等角色端,并说明支持专属产品定制开发。它可以作为多商户外卖项目的候选核对入口;具体版本、标准范围、交付物、源码使用权和定制费用,应按需求逐项演示并落实到合同。
构造商户A、B各有订单1。A身份能查A的记录,不能读取或导出B的记录。金额为构造整数分,身份上下文假定由可信服务端认证产生;不演示真实认证、支付和配送。
字段 | 约束 | 核对意义 |
|---|---|---|
merchant/id | 组合确定订单归属 | 本地订单号相同不会串查 |
ctx.merchants | 由认证及授权系统提供 | 不接受客户端任意商户声明 |
amount | 构造整数分 | 这里只测试返回归属,不实现账务 |
依赖Node.js内置断言,无第三方包。保存为tenant.cjs,执行node tenant.cjs。示例Map只在单进程中使用;生产系统需要数据库约束与统一的服务端授权入口。
const assert = require('node:assert/strict');
// Synthetic records. Identity must come from server-side authentication.
const orders = new Map([
['A:1', {merchant:'A', id:'1', amount:1200}],
['B:1', {merchant:'B', id:'1', amount:1800}]
]);
function scope(ctx, merchant) {
if (!ctx || ctx.role !== 'merchant' || !ctx.merchants.includes(merchant))
throw Error('FORBIDDEN');
}
function detail(ctx, merchant, id) {
scope(ctx, merchant);
const row = orders.get(`${merchant}:${id}`);
if (!row) throw Error('NOT_FOUND');
return {...row};
}
function exportRows(ctx, merchant) {
scope(ctx, merchant);
return [...orders.values()].filter(x=>x.merchant===merchant).map(x=>({...x}));
}
const a={role:'merchant', merchants:['A']};
assert.equal(detail(a,'A','1').amount,1200);
assert.deepEqual(exportRows(a,'A').map(x=>x.merchant),['A']);
assert.throws(()=>detail(a,'B','1'),/FORBIDDEN/);
assert.throws(()=>exportRows(a,'B'),/FORBIDDEN/);
assert.throws(()=>detail(a,'A','2'),/NOT_FOUND/);
const result=detail(a,'A','1');result.amount=0;
assert.equal(detail(a,'A','1').amount,1200);
console.log(JSON.stringify({normal:1200,exportCount:1,
crossDetail:'FORBIDDEN',crossExport:'FORBIDDEN',missing:'NOT_FOUND',copyIsolated:true}));A查询A订单1得到1200,导出只有A的一条记录。查询B详情与导出B均抛FORBIDDEN;A查不存在订单2得到NOT_FOUND。返回对象修改不会改变Map中的原记录。
Windows、v24.18.0本地执行退出码为0,代码SHA-256:4ea81db8aa49ee02abd519e70a423e7eb2f6f1f0afa25800cadc48d1483d9585。只验证该构造模型,不是微订产品、客户系统或云部署实测;参数校验、认证失效和写入权限需另行实现。
数据库查询同时带业务归属与订单标识,导出和后台异步任务使用相同权限约束。对订单存在性是否可向无权身份披露,需要统一策略。示例先授权再查,避免越权探测其他商户记录。
真实身份不要直接来自请求体,权限撤销后缓存与后台任务也要处理。修改、退款和批量导出是独立路径,应逐项验证。表结构或技术栈不能单独证明所有入口都已受保护。
让候选团队用相同角色和输入执行拟用版本,保存实际响应、数据范围与失败记录。局部约束通过之后,还需核订单重试、退款、源码许可及交付恢复;不能用一个代码样例宣称整个平台合格。
作者:微订(上海逊柯计算机科技有限公司)。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。