Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在XPages中通过JS创建新数据库时设置ACL_Xpages_Xpages Ssjs - Fatal编程技术网

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

在XPages中通过JS创建新数据库时设置ACL,xpages,xpages-ssjs,Xpages,Xpages Ssjs,我正在通过一个动作按钮使用JS创建一个新的数据库。发生以下顺序: 创建数据库时,必须将-default-access设置为Manager 然后我创建了几个acentry。为当前用户创建的第一个条目,并将其设置为类型person和具有管理员权限 然后,我创建了几个具有不同权限的其他条目,并保存ACL 如果我打开数据库,ACL的外观和行为都正确,除了-default-的访问级别为Manager 因此,我尝试更改代码,以各种方式将-default-的访问级别设置为Author,all导致异常:

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

  • 创建数据库时,必须将-default-access设置为Manager
  • 然后我创建了几个acentry。为当前用户创建的第一个条目,并将其设置为类型person和具有管理员权限
  • 然后,我创建了几个具有不同权限的其他条目,并保存ACL
如果我打开数据库,ACL的外观和行为都正确,除了-default-的访问级别为Manager

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

  • 更改-默认-编写并保存
  • 首先如上所述保存ACL,然后更改-default-entry并保存
  • 使用
    var newACL=db.getACL()
    新建ACL对象,更改并尝试保存
似乎它不承认我是ACL的经理


问:如何从manager中更改-default-access?

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

因此,在您的模板中

  • [-Default-]=作者
    [匿名]=无法访问
    ,这会导致
  • -Default-=作者
    匿名=在新数据库中没有访问权限
更新 看起来容易些。您需要确保输入正确…
使用此功能:

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客户端中的服务器为空,web预览中的服务器为您的用户名)

工作起来很有魅力。如果对您不起作用,有几件事需要检查:

  • 它是否在本地工作(不涉及服务器)
  • 控制台上有错误吗
  • 您在服务器ECL中有什么访问级别
  • 检查数据库的“最大Internet访问权限”
前面的答案(已过时):

除此之外,它有点棘手

您可以创建新数据库:

   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;
var-db:Database=[…无论您在这里要做什么…];
var acl:acl=db.getAcl();
//不管你做什么,不要碰——默认-
acl.save();
acl.recycle();

var dbURL=db.getUrl();//问题是,在这种情况下,使用模板确实不起作用。我需要直接使用ACL。我只是尝试了另一种选择。将自己添加为具有管理员权限的ACL条目后,我保存了ACL和db.recycle。然后,我打开了数据库var newDB=etc,并检索了ACL,其中显示了默认值和我作为管理者的身份。我将-default-更改为Author并尝试保存ACL,但再次失败。如果我注释掉代码,将-default-改为author,那么一切都会按照我的预期工作,但会将数据库保留为-default-=Manager,这是我无法保留的。我添加了vars acl aclEntry和DB的循环,然后添加了vars acl aclEntry和DB的循环,然后添加了var DB2:NotesDatabase=dir.openDatabase(filePath+fileName);var acl2:NotesACL=targetDB2.getACL();var aclEntry2:NotesACLEntry=acl2.getEntry(“-default-”);然后设置aclenty2.setLevel(3)加上一些其他条目-这些条目似乎都起作用,直到我尝试acl2.save()时失败,并出现异常错误。用dbURL打开Db不起作用,但我认为这是我的服务器的一个问题,因为我以前在这台服务器上尝试过,但它不起作用,但向新的var打开Db应该做同样的事情。你需要解决URL问题。最有可能的是,一个连接文档可以帮助您(或者短名称的hosts/DNS条目)像一个符咒一样工作。我在现有代码中添加了服务器条目,一切都很完美。因此,即使我拥有Manager访问权限,也没有任何区别,它需要服务器具有Manager访问权限。我猜这是因为它运行的是SSJS,所以它是使用服务器ID运行的,并且有服务器访问权限。首先,它从默认设置中获取管理器权限,如果ACL中没有服务器的显式条目,则无法更改默认设置,因为这样ACL中就没有管理器。