在XPage中通过JS创建新数据库时设置ACL

时间:2014-05-22 15:46:26

标签: xpages xpages-ssjs

我正在使用动作按钮中的JS创建一个新数据库。发生以下顺序:

  • 创建数据库时,-default- access设置为Manager必须是。
  • 然后我创建了几个aclEntries。为当前用户创建的第一个条目,并将其设置为类型人员并具有管理员权限
  • 然后我创建了其他几个不同的条目并保存ACL。

如果我打开Db,ACL看起来和行为都正确,除了-default-具有Manager的访问级别。

所以我尝试更改我的代码以各种方式为-default-设置访问级别,所有导致异常:

  • 将-default-更改为作者并保存
  • 首先按上述方法保存ACL,然后更改-default-条目并保存
  • 使用var newACL = db.getACL()重新创建ACL对象,更改并尝试保存

似乎它不认识我作为ACL的管理者。

问:如何更改-default- access from manager?

1 个答案:

答案 0 :(得分:2)

获得良好的默认ACL的最简单方法可能是使用模板数据库。模板中方括号中的所有条目都将作为ACL条目复制到新数据库中。

所以在你的模板中你会有

  • [-Default-]=Author[Anonymous]=No Access会产生
  • 新数据库中的
  • -Default-=AuthorAnonymous=No Access

<强>更新 看起来更容易。你需要确保输入正确...
使用此功能:

function makeDB(dbName) {
   var server = database.getServer();
   var you = @UserName();
   var dbDir = session.getDbDirectory(server);
   var db = dbDir.createDatabase(dbName);
   var acl = db.getACL();
   acl.createACLEntry(you,6);
   if (server != "" && server != you) {
      acl.createACLEntry(server,6);
   }   
   var def = acl.getEntry("-Default-");
   def.setLevel(3);
   acl.save();
}

然后使用以下方法调用该函数:

makeDB("someFancyDBName");

在该函数中,我们确保运行脚本的服务器和运行它的服务器都在ACL中作为管理器(包括本地数据库的情况,在Notes客户机中服务器是空的,在网页预览将是您的用户名。)

像魅力一样工作。如果它对您不起作用,有几件事需要检查:

  • 它是否适用于本地(不涉及服务器)?
  • 你在控制台上有错误吗?
  • 您在服务器 ECL
  • 中拥有哪种访问级别
  • 检查&#34;最大互联网访问权限&#34;数据库

上一个回答(已废弃):

除此之外,它有点棘手......

您创建新数据库:

   var db:Database = [... whatever you have todo here ...];
   var acl:Acl = db.getAcl();
   // Do whatever you do, don't touch -Default-
   acl.save();
   acl.recycle();
   var dbURL = db.getUrl(); // <-- off my head might be slightly different name
   db.recycle();

   // Now the real work
   var db2 = session.evaluate(dbUrl);
   var acl2 = db2.getAcl();

   // Change default here;

键入我的头,包含错别字。

这应该有效。让我们知道它是怎么回事