2016-09-30 33 views
2

在我正在AEM 6.1中工作的項目中,我們使用「新」方法通過行resolverFactory.getServiceResourceResolver()獲取有效的ResourceResolver對象。正如您所知,必須在環境中創建具有正確權限的系統用戶才能在JCR中執行一些任務。我們創建了具有管理員權限的系統用戶。AEM 6.1 - 解鎖具有resolverFactory.getServiceResourceResolver()方法的頁面問題

連接的權限:useradmin page

該用戶被分配到Apache的吊索服務用戶Mapper服務配置爲默認用戶,所以我們沒有在代碼中的地圖對象隨時通過與子服務名稱。我正在測試的頁面路徑是/content/test/test-1/test-folder/test-unlock-page/。附上相關的CODE。當執行行page.unlock(),這將引發一個WCMException

@Override 
public void unlock(String userId, String pagePath) throws LoginException, WCMException {   

    ResourceResolver resourceResolver =resourceResolverFactory.getServiceResourceResolver(null); 
    PageManager pageMgr = resourceResolver.adaptTo(PageManager.class); 
    Session session = resourceResolver.adaptTo(Session.class); 
    Page page = pageMgr.getPage(pagePath); 

    if(!page.isLocked()) { 
     log.info("Page is NOT locked, unlock operation not mandatory: " + pagePath); 
    } else { 
    log.info("Unlocking page on behalf of: " + userId); 
    page.unlock(); 
} 

異常的原因是:

javax.jcr.lock.LockException: Not an owner of the lock /content/test/test-1/test-folder/test-unlock-page/jcr:content 

我讀到這link和文檔根據我的理解,當你指定一個修改允許這個用戶的用戶可以(鎖定),但這一段沒有告訴任何有關解鎖

在JCR級別,用戶可以通過修改其屬性來修改資源,鎖定,版本控制,nt修改,並且它們對定義jcr:content子節點的節點具有完全寫入權限,例如cq:Page ,nt:file,cq:資產

我想如果有可能在其他地方分配一個權限解鎖給這個系統用戶,因爲它似乎是不可能做到與當前特權。

感謝您的任何想法。

+0

我看到過這個問題。我認爲只有鎖主和非常特殊的「管理員」用戶才能解鎖。所以你可以嘗試的是在代碼中模擬鎖擁有者會話,然後解鎖。讓我知道如果你找到另一種方式。 – Abhishek

+0

@Abhishek謝謝你的回答,非常幫助我。我測試了這一點,似乎當我創建一個模擬爲了讓新系統用戶的行爲像管理員用戶,解鎖過程正常工作!但奇怪的是,如果我把'page.canUnlock()' - [documentation]解鎖之前進行驗證(https://docs.adobe.com/docs/en/cq/5-6-1/javadoc/ com/day/cq/wcm/api/Page.html#canUnlock())返回false,但解鎖過程正常。在我看來,解鎖只是鎖擁有者或顯式管理員用戶可以解鎖。我會告訴我是否找到另一種方式。 – codeparty2016

回答

0

這是不可能的。只有管​​理員用戶和鎖擁有者才能刪除該鎖。

+1

我不喜歡這個功能的事情是他們不允許'administrators'組解鎖。我沒有看到此行爲的任何有效理由。 – Abhishek

0

只有鎖所有者才能刪除鎖。即使是管理員組的成員也無法解鎖頁面。但是,管理員用戶可以使用CRX Content Explorer刪除任何頁面的鎖定。