2016-09-30 3 views
2

В проекте, который я работаю в AEM 6.1, мы используем «новый» способ получения действительного объекта ResourceResolver по строке resolverFactory.getServiceResourceResolver(). Как вам известно, необходимо иметь системного пользователя, созданного с правильными разрешениями в среде, для выполнения некоторых задач в JCR. Мы создали пользователя системы с правами администратора.AEM 6.1 - Проблема с разблокировкой страниц с использованием метода resolverFactory.getServiceResourceResolver()

прикрепиться разрешений: useradmin page

Этот пользователь назначается Apache Sling Service User Mapper Service конфигурации как Default User, поэтому мы не должны пройти в любое время в коде объекта Map с именем подсервиса. Путь к странице, который я тестирую, - /content/test/test-1/test-folder/test-unlock-page/. Присоединен к соответствующему КОДУ. Когда линия 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 , нт: файл, сд: Asset

Я имею в виду, если можно назначить в другом месте разрешения, чтобы разблокировать в этой системе пользователя, потому что кажется, что это невозможное, чтобы сделать это с текущими привилегиями.

Спасибо за любое представление об этом.

+0

Я видел эту проблему. Я думаю, что только владелец замка и чрезвычайно специальный пользователь 'admin' могут разблокировать. Итак, что вы можете попробовать, это выдавать себя за сеанс владельца замка в вашем коде, а затем разблокировать. Дайте мне знать, если вы найдете другой путь. – Abhishek

+0

@Abhishek Спасибо за ваш ответ, очень помогите мне. Я тестировал это и, кажется, когда создаю олицетворение, чтобы позволить новому пользователю системы вести себя как пользователь admin, процесс разблокировки работает нормально! но странно, что если я поставил проверку перед разблокировкой с помощью '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

Невозможно. только пользователь admin и владелец блокировки могут удалить блокировку.

+1

То, что мне не нравится в этой функции, заключается в том, что они не позволяют группе «администраторов» разблокировать. Я не вижу веских причин такого поведения. – Abhishek

0

Только владелец замка может снять замок. Даже член группы администраторов не может разблокировать страницу. Однако пользователь-администратор может удалить блокировку любой страницы с помощью проводника содержимого CRX.