【发布时间】:2015-12-17 14:08:11
【问题描述】:
更新:这不仅仅是关于 javascript 的问题,而是与 MarkLogic 平台上的 javascript 实现有关。
正如这个问题的标题所指出的,它与 ValueIterator 函数返回的 xdmp.userRoles() 的具体行为有关。
我正在尝试查看用户是否在 MarkLogic 安全数据库中具有特定角色,因此我已经这样做了:
declareUpdate();
var pid = '7610802';
// TODO validate that user can do this
var spo = 'scc-proj-' + pid + '-owner';
var spm = 'scc-proj-' + pid + '-member';
var spam = 'scc-proj-' + pid + '-adv-member';
// we need the security db Ids of these roles
var spoId = xdmp.role(spo);
var spamId = xdmp.role(spam);
var acceptedRoleIds = [spamId,spoId];
// get roleIds from sec db for this user
var userRoleIds = xdmp.userRoles('scc-user-1');
// map ValueIterator to array
var userRoleIdsArray = userRoleIds.toArray();
现在 userRoleIdsArray 将 id 保存为 unnsigned long ,如下所示:
[
"1088529792688125909",
"1452323661308702627",
"10258509559147330558",
"10161853410412530308",
"6677433310138437512",
"12773061729023600875",
"7482704131174481508",
"3191093315651213021", <<<<< this is the one!!!
"5126952842460325403",
"7089338530631756591",
"15520654661378671735",
"13041542794130379697"
]
现在 indexOf() 给我-1 aka not found
userRoleIdsArray.indexOf(3191093315651213021);
或
userRoleIdsArray.indexOf("3191093315651213021");
给:
-1
虽然
userRoleIdsArray[7]==3191093315651213021;
给:
true
我在这里缺少什么?这不是indexOf()的使用方式吗?
更新 >>> 下面的东西是“在一边”,但结果却分散了上述核心问题的注意力。 @DaveCassel 的评论回答了以下行为。
btw 在创建的数组acceptedRoleIds 上更奇怪:
acceptedRoleIds.indexOf(spoId);
作品
acceptedRoleIds.indexOf(3191093315651213021);
没有?
【问题讨论】:
-
嗯,在浏览器控制台输入
3191093315651213021,回车就可以看到了。 -
试过 userRoleIdsArray.indexOf("3191093315651213021"); ?
-
也就是说,如果 id 是字符串,为什么要尝试使用整数来访问它们?
-
@Idos 恐怕这个问题比你意识到的更复杂,这不是一个普通的 javascript 问题......你的回答不能解决我的问题......你的代码工作正常。但是我的问题是,如果我将 ValueIterator(我相信它是特定于 ML 的)转换为数组并在 MarkLogic 中使用 indexOf() 函数,则会遇到上述问题。
标签: javascript marklogic