[英]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.