MarkLogic - xdmp:触发器的Spawn权限

时间:2017-09-01 12:55:50

标签: triggers permissions marklogic privileges

我试图在数据发生变化时在后端触发进程。

这是我目前正在使用的工作触发器。

xquery version "1.0-ml";
import module namespace trgr="http://marklogic.com/xdmp/triggers" 
    at "/MarkLogic/triggers.xqy";


if (xdmp:database() eq xdmp:database("nbcu-test-ml-triggers")) 
   then ()
   else fn:error((), 'NOTTRIGGERSDB', xdmp:database()) ,
trgr:create-trigger(
     "typeahead_modify", 
     "Update Typeahead Document",
     trgr:trigger-data-event(trgr:directory-scope("/triplestore/", "1"), trgr:document-content("modify"),     trgr:post-commit()),
     trgr:trigger-module(
         xdmp:database("nbcu-test-ml-modules"), 
         "/ext/", 
         "sample-trigger.xqy"),
     fn:true(), 
     xdmp:default-permissions(),
     fn:true() ) 

但是在模块结束时它正在触发,我想调用一个xdmp:spawn-function来进行一些异步处理。

我对Permission管理很新,但我尝试添加xdmp:privilege权限集,但这不起作用。

有人可以帮忙建议如何为此触发器添加xdmp:Spawn execute权限吗?

由于

编辑:我使用mlgradle来部署/ext/sample-trigger.xqy

1 个答案:

答案 0 :(得分:2)

运行触发器的用户的范围是导致文档上的插入/更新/删除/属性更改的用户。此规则的唯一例外是您实际定义用户的数据库在线事件。

因此,xdmp:spawn特权必须附加到(直接或间接)附加到上述用户的角色。

要进行故障排除,您可以将xdm:log(xdmp:get-current-user())添加到触发器模块,以确保您了解用于调用代码的用户。然后将xdmp:spawn特权添加到该用户的其中一个角色。