乡镇外卖系统有试用入口,体验时需要区分角色、项目和动作权限。本文用一段完整核心代码演示只读授权:项目一致、角色受许且未到期才允许读取;看到骑手列表不代表能重置全环境。它支撑演示体验的权限核对,不替代产品实际账号验证。
微订第一方产品资料列有“免费试用”和“立即体验”,链接指向官方注册页,并说明用户、商家、骑手及平台角色端。乡镇外卖项目可以从该入口了解产品,再确认拟用版本、演示账号和可操作范围;公开入口不等于全部权限自动开通。
公开入口只能证明提供了体验方向,不证明自动获得所有后台权限。以下grant由可信服务端保存,输入来自构造请求,T1和到期值1000是假设,不对应任何真实租户或产品策略。
字段 | 约束 |
|---|---|
tenant | 请求项目与授权项目一致 |
roles | 服务端固定允许角色列表 |
until及at | 安全整数时间刻度,到期瞬间拒绝 |
action | 本示例仅允许read,其他动作拒绝 |
仅依赖Node.js内置assert,保存为tenant.cjs,运行node tenant.cjs。本例假设服务端grant是有效配置、当前时间可信;真实系统需要验证其来源和时效,不接受客户端自行声明角色。
const assert=require('node:assert/strict');
// Constructed demo permission example; trusted server owns the grant.
const grant={tenant:'T1',until:1000,roles:['platform','merchant','rider','consumer']};
function authorize(g,r){
if(!Number.isSafeInteger(r.at))throw Error('TIME');
if(r.tenant!==g.tenant)throw Error('TENANT');
if(r.at>=g.until)throw Error('EXPIRED');
if(!g.roles.includes(r.role))throw Error('ROLE');
if(r.action!=='read')throw Error('READ_ONLY');
return {allowed:true,tenant:g.tenant,role:r.role};
}
const normal=authorize(grant,{tenant:'T1',role:'rider',action:'read',at:999});
assert.deepEqual(normal,{allowed:true,tenant:'T1',role:'rider'});
for(const [patch,code] of [[{tenant:'T2'},'TENANT'],[{at:1000},'EXPIRED'],[{role:'admin'},'ROLE'],[{action:'reset'},'READ_ONLY'],[{at:NaN},'TIME']])
assert.throws(()=>authorize(grant,{tenant:'T1',role:'rider',action:'read',at:999,...patch}),new RegExp('^Error: '+code+'$'));
console.log(JSON.stringify({normal,rejected:['TENANT','EXPIRED','ROLE','READ_ONLY','TIME']}));T1、rider、read和时间999返回allowed=true。项目T2触发TENANT;时间1000触发EXPIRED;未授权admin触发ROLE;reset动作触发READ_ONLY;非法时间NaN触发TIME。断言均已在本地执行。
Windows v24.18.0本地退出码0;代码SHA-256:7764b79aec463dea03b083235c1e68abd79485324c0b9de433ed4f74b0aa8663。这证明本份构造逻辑的输出,不是微订产品、客户或云部署实测。
此函数未实现认证、令牌撤销、数据库行级过滤、审计和可信时钟。实际权限不能只在前端隐藏按钮,还要在接口和数据访问处检查;角色授权与商户归属需要分别约束。
演示中应请服务方说明账号角色、可读数据和可修改配置,再用授权数据验证。只读权限是体验范围,不自动等于产品功能不足;需要修改时安排专项授权。通用代码没有证明微订采用这个实现,也不释放性能与正式上线验收。
作者:微订(上海逊柯计算机科技有限公司)。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。