通过返回闭包函数并累积参数,在最终调用时执行校验逻辑即可实现。核心做法是定义一个高阶函数,它接收权限配置或初始参数,返回一个中间函数用于收集用户信息,最后返回的函数在参数齐全后触发具体的权限检查函数。

如何构建柯里化权限校验的高阶函数
利用JavaScript的闭包特性,可以创建一个工厂函数来生成校验器。该函数接收权限标识作为初始参数,返回一个接受用户数据的函数,当数据满足条件时,再返回最终的执行函数或直接执行校验。

function createPermissionChecker(requiredRole) {
return function(user) {
if (!user || !user.role) {
throw new Error('User data incomplete');
}
return function(action) {
if (user.role === requiredRole) {
console.log(`Access granted for ${action}`);
return true;
} else {
console.log(`Access denied for ${action}`);
return false;
}
};
};
}
const adminCheck = createPermissionChecker('admin');
const checkAdminAction = adminCheck({ role: 'admin' });
checkAdminAction('delete_user');如何处理多参数累积与即时校验
对于需要多个参数(如资源ID和操作类型)的场景,可以使用递归或状态对象来累积参数。当检测到所有必需参数都已提供时,立即执行校验逻辑并返回结果,否则继续返回接收下一个参数的函数。
立即学习“Java免费学习笔记(深入)”;

function curryCheck(fn, args = []) {
return function(...nextArgs) {
const allArgs = [...args, ...nextArgs];
if (allArgs.length >= fn.length) {
return fn.apply(null, allArgs);
}
return curryCheck(fn, allArgs);
};
}
function validateResource(resourceId, action, userId) {
return resourceId && action && userId ? 'Valid' : 'Invalid';
}
const curriedValidate = curryCheck(validateResource);
console.log(curriedValidate('res1')('read')('user1')); // Valid基于空值输入时的错误处理机制
在柯里化过程中,如果中途传入`null`或`undefined`,应提前终止链式调用并抛出异常或返回特定状态。这能防止后续步骤因缺少上下文而静默失败,确保权限校验的健壮性。


















