如何用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 }
使用步骤
- 将上述脚本保存为
add_permission_check.awk - 执行命令处理目标文件(操作前请务必备份原文件):
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
相关产品推荐
相关产品推荐

