簡體   English   中英

在XWiki中獲取當前用戶可以訪問的所有空間

[英]Get all the spaces the current user has access to in XWiki

如何在Java組件中獲取當前用戶可以訪問的所有空間?

我有以下內容:

List<String> lstSpaces = new ArrayList<String>();
XWikiContext xcontext = this.xwikiContextProvider.get();
XWiki xwiki = xcontext.getWiki();
lstSpaces = xwiki.getSpaces(xcontext);

盡管此操作成功返回了所有空格,但它還返回了當前用戶沒有“查看”或其他訪問權限的空格。 而且似乎Java .getSpaces已被棄用,而我似乎找不到為此的新方法。 http://maven.xwiki.org/site/docs/xwiki-javadoc-5.0.x/似乎已經過時,因為xwiki.getSpaces()在此javadoc中仍然處於活動狀態,沒有其他選擇。

檢查當前用戶的權限

有一個API,用於檢查給定頁面的當前用戶的權限。 不需要檢查整個空間的權限(可以對各種解釋進行開放,例如“用戶可以訪問至少一頁”,或者“權限”視圖中的“用戶具有“確定”復選框)用於該空間的根頁面”)。

通常,通常會檢查該空間“主頁”(名稱為WebHome )的訪問權限,因此指向該空間的鏈接不會導致該用戶進入“禁止”頁面。

也沒有查詢過濾器之類,而是必須分別檢查每個頁面。

訪問檢查在XWiki對象的checkAccess(String action, XWikiDocument doc, XWikiContext context)方法中; 在空間主頁上查看視圖權限的檢查應類似於:

String spaceName = "...."
XWikiDocument spaceHomePage = xwiki.getDocument(spaceName +".WebHome", xcontext)
if (xwiki.checkAccess("view", spaceHomePage, xcontext) ) {
    // space home viewable
} else {
    // space home not viewable
}

“當前用戶”存儲在xcontext對象中,無需明確地在任何地方傳遞此用戶對象。 (以防萬一有人想知道。)

檢查其他用戶的權限

(這沒有被問到,但正如我只是在查找...)

如果您想知道當前上下文中用戶以外的其他用戶的訪問權限,則xwiki對象的權限服務上有hasAccessLevel(String level, String user, String docname) ,需要對用戶的完整引用user個人資料頁面,因此代碼通常如下所示:

XWikiUser user = xwiki.getUser(userLoginHere, xcontext).getUser();
if (xwiki.getRightService().hasAccessLevel("view", user.getUser(), spaceRef +".WebHome", xcontext) ) {
  // has view rights ...
}

另外,如果您自己位於Java組件中,則可以讓組件管理器@Inject一個org.xwiki.security.authorization.AuthorizationManager並在該類中使用hasAccess方法,該方法接受類型化的對象而不是純字符串。 (它需要一個DocumentReference ,而不是一個User對象,因此向其提供一個user.getUserReference() 。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM