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

如何在Gunit中执行requestQuote?权限不足问题解决方案咨询

解决Gunit中权限缺失报错的方案

1. 给测试用户直接添加对应权限

在Gunit测试的前置步骤中,为当前执行测试的用户分配所需权限,示例代码如下:

// 获取当前测试用户
def testUser = User.get(User.getPrincipalName())
// 添加报价权限
testUser.addPermission(Permission.get("QuotePermission"))
// 添加编辑权限
testUser.addPermission(Permission.get("EditPermission"))
// 添加提前权限
testUser.addPermission(Permission.get("AdvancePermission"))
// 保存权限变更
testUser.save()

执行完这段代码后,再调用policyPeriod.SubmissionProcess.requestQuote(true,true)即可通过权限校验。

2. 使用权限上下文临时模拟权限

如果不想修改用户的永久权限配置,可以通过权限上下文临时授予权限,执行完目标方法后恢复原上下文:

// 保存原权限上下文
def originalContext = PermissionContext.get()
try {
    // 构建包含所需权限的临时上下文
    def newContext = new PermissionContext([
        "QuotePermission",
        "EditPermission",
        "AdvancePermission"
    ])
    // 设置临时生效的权限上下文
    PermissionContext.set(newContext)
    // 执行目标方法
    policyPeriod.SubmissionProcess.requestQuote(true,true)
} finally {
    // 恢复原权限上下文
    PermissionContext.set(originalContext)
}

3. 测试场景下绕过权限校验(谨慎使用)

如果仅需测试业务逻辑而非权限逻辑,可以临时禁用该方法的权限校验。比如在测试类中覆盖方法逻辑:

// 示例:在测试类中跳过权限校验,直接执行核心逻辑
SubmissionProcess.metaClass.requestQuote = { boolean param1, boolean param2 ->
    // 调用原方法核心逻辑(需确保原方法有可直接调用的核心实现)
    delegate.originalRequestQuote(param1, param2)
}

注意:该方式仅适用于纯业务逻辑测试,不可在生产环境使用,且会跳过权限相关的测试覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 00:14:56