2014-05-22 45 views
1

我正在使用操作按鈕中的JS創建新數據庫。以下順序發生:在XPages中通過JS創建新數據庫時設置ACL

  • 當創建數據庫時,-default-access被設置爲必須的Manager。
  • 然後我創建了幾個aclEntries。爲當前用戶創建的第一個條目,並將它們設置爲類型人員並擁有管理者權限
  • 然後,我創建了幾個其他條目,然後保存ACL。

如果我打開Db,ACL的外觀和行爲都正確,除了-default-具有Manager的訪問級別。

所以,我想改變我的代碼來設置訪問級別 - 默認以各種方式來創作,所有導致異常:

  • 變化 - 默認爲作者和保存
  • 首先保存ACL如上,然後更改 - 默認輸入和保存
  • 創建新的ACL對象使用var newACL = db.getACL(),變化和嘗試保存

它似乎並不認可我是ACL中的管理者。

問:如何將-default-訪問權限從管理者更改爲默認訪問權限?

回答

2

獲得良好的默認ACL的最簡單方法可能是使用模板數據庫。模板中的方括號中的所有條目將作爲ACL條目複製到新數據庫中。

所以在你的模板,你將有

  • [-Default-]=Author[Anonymous]=No Access導致
  • -Default-=AuthorAnonymous=No Access在新的DB

更新 更容易,它看起來。你需要確保獲得正確的條目...
使用此功能:

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
  • 檢查「最大互聯網接入」數據庫

以前的答案(過時)的:

比其他這是一個小技巧...

您創建新的數據庫:

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; 

鍵入我的頭,包含錯別字。

這應該工作。讓我們知道它是怎麼回事

+0

問題是,使用模板真的不會在這種情況下工作。我需要直接使用ACL。我只是嘗試了另一種選擇。將自己添加爲具有管理員權限的ACL條目後,我保存了ACL和db.recycle。然後,我打開數據庫var newDB =等,並檢索了顯示默認和我自己作爲管理器的ACL。我將-default-更改爲Author,並嘗試保存ACL並再次失敗。如果我將代碼註釋掉以將-default-更改爲author,那麼所有操作都會按照我所期望的那樣工作,但將-default- = Manager留給DB,我不能將其留在。 –

+0

我加入再循環的VARS ACL將AclEntry和DB的,然後 –

+0

我加入VARS ACL將AclEntry和DB,然後 變種DB2的再循環:=的NotesDatabase dir.openDatabase(文件路徑+文件名); var acl2:NotesACL = targetDB2.getACL(); var aclEntry2:NotesACLEntry = acl2.getEntry(「 - default-」); 然後設置aclEntry2.setLevel(3)加上一些其他條目 - 這些都似乎工作,直到我嘗試acl2.save(),它失敗了,我得到了一個異常錯誤。通過dbURL打開Db將無法正常工作,但我認爲這是我的服務器的問題,因爲我曾在此服務器上嘗試過這種方法,但無法正常工作,但將數據庫打開爲新的變量也應該執行相同的操作。 –

相關問題