如何针对请求方法而非路由触发SailsJS策略?
在Sails 1.0中按请求方法绑定策略的实现方案
嗨,好消息!在Sails 1.0里,你完全可以直接用你设想的那种写法来按请求方法绑定策略,不用绕路~
1. 直接通过HTTP方法通配路由配置(推荐)
Sails 1.0的策略系统原生支持按HTTP方法+通配符的方式绑定策略,完全符合你想要的'DELETE *': 'isAdmin'写法。这种方式简洁高效,适合全局统一管控特定请求方法的权限。
比如你可以在config/policies.js里这么写:
module.exports.policies = { // 对所有DELETE请求强制要求管理员权限 'DELETE *': 'isAdmin', // 如果你只想针对蓝图API的DELETE请求,也可以更精准地匹配路由前缀 'DELETE /api/*': 'isAdmin', // 甚至可以针对特定模型的蓝图操作单独配置 'DELETE /api/v1/posts': 'isAdmin' };
这种配置方式的优势在于不用修改现有策略代码,直接在全局配置层面完成权限管控,非常适合你“仅向管理员开放蓝图API DELETE操作”的需求,生产环境用起来省心又清晰。
2. 在策略内部检查请求方法(灵活扩展方案)
你提到的“在admin策略中添加请求方法检查”也是可行的,这种方式适合需要更复杂逻辑的场景(比如结合路由、用户角色细分等额外条件)。
比如修改你的isAdmin策略:
// api/policies/isAdmin.js module.exports = async function (req, res, proceed) { // 先验证用户是否为管理员 if (!req.user || !req.user.isAdmin) { return res.forbidden('只有管理员能执行此操作'); } // 针对DELETE请求添加额外逻辑(比如日志、特殊权限校验) if (req.method === 'DELETE') { console.log(`管理员 ${req.user.id} 执行了DELETE操作,路径:${req.path}`); // 这里可以加更多自定义校验,比如限制某些敏感资源的删除 } return proceed(); };
如果之后你需要给某些特定路由的DELETE操作开例外,或者添加更多条件判断,这种方式会更灵活。
结合你的场景来说,如果你只是想全局锁定所有DELETE请求的管理员权限,第一种配置方式是最直接的,一行代码就能实现你的目标,让第三方脚本以管理员身份调用蓝图API完成扩展操作。
内容的提问来源于stack exchange,提问作者Philip Feldmann
相关产品推荐
相关产品推荐

