You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bash脚本为@AuraEnabled方法添加权限校验代码?

自动给Salesforce Aura方法添加权限校验的Bash/awk方案

问题解决思路

精准处理force-app/main/default/classes/Controller.cls,核心是区分@AuraEnabled注解的方法和属性,仅在方法体首行无指定权限校验时插入代码,避免之前脚本误操作所有大括号的问题。

最终awk脚本

BEGIN {
    in_aura_method = 0
    brace_level = 0
    # 替换为你实际需要的权限校验代码,注意保持与代码一致的缩进
    perm_check_line = "    AccessVerificationService.throwExceptionIfNo(/* 替换为实际权限参数 */);"
}

# 匹配带@AuraEnabled的方法(注解后紧跟方法定义的())
/@AuraEnabled/ && /\(/ {
    in_aura_method = 1
    print $0
    next
}

# 匹配带@AuraEnabled的属性(注解后无(),是变量定义)
/@AuraEnabled/ && !/\(/ {
    in_aura_method = 0
    print $0
    next
}

# 处理方法体的第一个大括号
in_aura_method && /\{/ {
    brace_level++
    print $0
    # 标记下一行需要检查是否插入校验代码
    check_next_line = 1
    next
}

# 检查并处理目标行
check_next_line {
    # 跳过空行和单行注释行
    if ($0 ~ /^[[:space:]]*$/ || $0 ~ /^[[:space:]]*\/\//) {
        print $0
        next
    }
    # 若当前行不是权限校验代码,则插入指定行
    if ($0 !~ /^[[:space:]]*AccessVerificationService\.throwExceptionIfNo/) {
        print perm_check_line
    }
    print $0
    # 重置状态,避免后续代码误触发逻辑
    check_next_line = 0
    in_aura_method = 0
    brace_level = 0
    next
}

# 其他所有行直接输出
{ print $0 }

使用步骤

  1. 将上述脚本保存为add_permission_check.awk
  2. 执行命令处理目标文件(操作前请务必备份原文件):
awk -f add_permission_check.awk force-app/main/default/classes/Controller.cls > temp.cls && mv temp.cls force-app/main/default/classes/Controller.cls

关键逻辑说明

  • 方法/属性区分:通过@AuraEnabled注解后是否带有(),精准识别需要处理的方法,跳过属性
  • 大括号跟踪:仅在方法体的第一个{后触发检查逻辑,嵌套大括号不会干扰处理
  • 跳过无关行:方法体内的空行、单行注释会被跳过,直到找到第一行有效业务代码
  • 精准插入:只有当第一行有效代码不是目标权限校验时,才插入指定校验行

效果示例

处理前代码片段:

@AuraEnabled
public static Account getAccount(String accId) {
    // 查询账户记录
    Account acc = [SELECT Id, Name FROM Account WHERE Id = :accId];
    return acc;
}

@AuraEnabled
public static String accountName; // 带注解的属性,不会被处理

处理后代码片段:

@AuraEnabled
public static Account getAccount(String accId) {
    AccessVerificationService.throwExceptionIfNo(/* 替换为实际权限参数 */);
    // 查询账户记录
    Account acc = [SELECT Id, Name FROM Account WHERE Id = :accId];
    return acc;
}

@AuraEnabled
public static String accountName; // 带注解的属性,不会被处理

内容的提问来源于stack exchange,提问作者Patlatus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 07:17:04