Hugo Koopmans
Hugo Koopmans

Reputation: 1369

object-node to element-node conversion fails?

I am trying to set a default capability on a role in JavaScript like so:

declareUpdate(); 
var sec = require('/MarkLogic/security.xqy'); 
var pid = 3223704;
var role = 'scc-proj-' + pid + '-member';
sec.roleSetDefaultPermissions("scc-proj-3223704-member",(xdmp.permission("scc-proj-3223704-member", "read")));

This gives an error:

[javascript] XDMP-AS: $permissions as element(sec:permission)* -- Invalid coercion: object-node{"capability": text{"read"}, "roleId": text{"12999117528518422097...} as element(sec:permission)

If I look into it seems that xdmp.permissions() gives back an object node while sec.roleSetDefaultPermissions() expects an element node. So seems there is some type conversion not working...

The XQuery equivalent works okay.

  1. Can this be fixed in javascript?
  2. As a workaround can I run the XQuery from a javascript with xdmp.eval or invoke?

Upvotes: 1

Views: 52

Answers (1)

wst
wst

Reputation: 11771

Just pass element as the 3rd optional $output-kind parameter to xdmp.permission:

xdmp.permission("scc-proj-3223704-member", "read", "element");

Upvotes: 3

Related Questions