我在Xpages應用程序的頂部有一個導航欄。這個元素將被許多Xpage應用程序共享 - 它的工作方式類似於Xpage應用程序的內聯網。Xpages:確定用戶是否可以訪問數據庫
我不想將數據庫鏈接顯示給無權訪問數據庫的用戶。
如何確定用戶是否可以訪問數據庫?這是我應該以某種方式緩存,所以它不必一次又一次加載:
我在Xpages應用程序的頂部有一個導航欄。這個元素將被許多Xpage應用程序共享 - 它的工作方式類似於Xpage應用程序的內聯網。Xpages:確定用戶是否可以訪問數據庫
我不想將數據庫鏈接顯示給無權訪問數據庫的用戶。
如何確定用戶是否可以訪問數據庫?這是我應該以某種方式緩存,所以它不必一次又一次加載:
您可以使用Database
方法queryAccess(name)
獲取單個用戶的ACL級別。然後,您可以檢查「禁止訪問」和存款人。下面是如果用戶訪問分貝返回true一個例子:
db.queryAccess(userName) != ACL.LEVEL_NOACCESS && db.queryAccess(userName) != ACL.LEVEL_DEPOSITOR
我會建議你在用戶豆用戶緩存此。
每的建議是偉大的,但要注意在queryaccess一個限制:
從文檔:
如果指定在ACL中明確列出的名稱,queryAccess返回的訪問級別爲ACL輸入並且不檢查組。 如果您指定的名稱未在ACL中明確列出,queryAccess會檢查名稱是否是運行腳本的計算機已知的主地址簿中組的成員。在本地工作站上,該地址簿是個人通訊簿。在服務器上,該地址簿是Domino®Directory。如果queryAccess在一個或多個組中找到該名稱,它將返回這些組中的最高訪問級別。如果您指定的名稱未在ACL中單獨列出或作爲組的一部分列出,那麼queryAccess將返回ACL的默認訪問級別。
首先 - 如果代碼以用戶權限運行,則不能爲無法打開的數據庫調用queryAccess
。要解決這個問題,你可以強制代碼使用簽名者的會話並獲得訪問權限。但是...
我推薦這樣做:製作一個名爲的hasAccess。關於範圍:
實現Map接口,這樣你就可以像#{hasAccess[database]}
綁定它放在database
會是文件路徑,還是查找數據庫的特殊鍵。根據用戶的訪問實現緩存並返回true/false。您如何確定用戶的訪問權限取決於您,但我認爲最好的方法是使用try/catch嘗試打開該數據庫並使用isOpen()進行檢查。