调度程序作业没有足够的权限写入 svn

Scheduler Job did not have enough permission to write to the svn

我有一个调度程序每 5 分钟执行一次的作业脚本。此脚本搜索特定的工作项并更改它们。如果我手动执行脚本,该脚本运行良好,因为那时我是“当前用户”并且有足够的权限在 svn 中写入。但是如果调度程序执行它,当前用户是:“polarion”并且他没有对 svn 的写入权限,这有点奇怪但没关系。 错误是:

    Caused by: com.polarion.platform.service.repository.driver.DriverException: Sorry, you do not have access to the Subversion Repository. Please contact your Polarion or Subversion administrator if you need access.
    at com.polarion.platform.repository.driver.svn.internal.JavaSvnDriver.handleSVNException(JavaSvnDriver.java:1732)
    at com.polarion.platform.repository.driver.svn.internal.JavaSvnDriver.endActivityImpl(JavaSvnDriver.java:1564)
    at com.polarion.platform.repository.driver.svn.internal.JavaSvnDriver.endActivity(JavaSvnDriver.java:1496)
    at com.polarion.platform.internal.service.repository.Connection.commit(Connection.java:736)
    ... 42 more
    Caused by: org.tmatesoft.svn.core.SVNAuthenticationException: svn: E170001: CHECKOUT of '/repo/!svn/ver/54/Sandbox/7023/.polarion/tracker/workitems/100-199/7023-193/workitem.xml': 403 Forbidden (http://localhost)
    at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:68)

我在用户管理中找不到用户“polarion”,所以我不能给他更多的权限。 是否可以从其他用户或类似的东西执行写访问?

用户“polarion”在内部用于从 Polarion 的 SVN 存储库中读取信息。它通常不会写入(“提交”)到存储库中,因为这通常是在登录用户的用户帐户下完成的。 您的问题有两种解决方案:

  1. 快速简单的解决方法:修改svn access文件,让polarion用户对版本库有写入权限。这很容易从 Polarion 本身使用内置访问编辑器在管理-> 用户管理-> 访问管理下实现。这可能是不安全的,因为 polarion 用户的密码在服务器上的配置文件中以明文形式存在,因此任何有权访问服务器的人都可以修改 SVN-Repository。

  2. 使用 ISecurityService.doAsUser(..) 函数以不同用户的身份执行您的操作。通常,您可以将凭据放入 Polarion Vault 中以在不暴露用户名和密码的情况下检索它们。 这是一个例子:

     subject = securityService.loginUserFromVault(vaultKey, vaultKey);
     retVal = securityService.doAsUser(subject, new PrivilegedAction<Object>() {
       public Object run() {
         Object ret = null;
         try {
           ret = doAction();
           return ret;
         }
       }
     });
    

不用说第二种方法是更安全的工作方式,但它也更费力:)