Хобрук: Ваш путь к мастерству в программировании

Liferay 6.0.5 - скрыть IGFolders от владельца в приватном/общедоступном макете его приватного сообщества

Нам нужно создать скрытые "системные" подпапки в каждой папке IGFolder, которую создает обычный пользователь. Портлет галереи изображений находится в основном в частных макетах сообщества всех обычных пользователей. Портлеты и их конфигурация предварительно сгенерированы, поэтому обычные пользователи не могут их изменить (layout.user.[public|private].layouts.modified=false).

Почему мы хотим это сделать В этих системных папках мы будем хранить автоматически сгенерированные версии загруженных изображений. Это связано с тем, что мы также импортируем WebContent/JournalArticle, представляющие галереи изображений, которые предоставляют сами изображения разных размеров. В конце концов, мы хотим отображать содержимое IGFolders и JournalArticle одинаково, без особого кода.

Что я уже пробовал

  • Я попытался сделать это с помощью разрешений (resource-actions/imgallery.xml => owner-defaults), но на его собственных страницах сообщества пользователь также является администратором сообщества, что дает ему права делать и видеть почти все, что он хочет. (PermissionCheckerBagImpl.isCommunityAdminImpl)

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

  • Использование другого пользователя и группы для подпапок также не сработало, если groupId не совпадает с идентификатором родительской папки, для идентификатора родительской папки установлено значение 0, поэтому они вообще являются более длинными подпапками (IGFolderLocalServiceImpl.getParentFolderId).

Что может сработать, а я, вероятно, просто ошибаюсь

  • изменение владельца портлета/макета галереи изображений

  • возиться с разрешением так, как я не думал

  • добавление еще одного слоя групп/сообществ

  • размещение системных папок в другом месте (что, конечно, приводит
    к большему количеству кода для поддержания связи между ними и их родительской папкой
    )

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

Любые идеи приветствуются, пожалуйста, не стесняйтесь уточнять, я новичок в Liferay.


  • Я немного не понимаю, что вы подразумеваете под тем, чтобы IGFolders выглядели так же, как содержимое JournalArticle, и что вы пытаетесь сделать в целом. Не могли бы вы дать мне конкретное представление о том, чего вы на самом деле пытаетесь достичь? Разве размеры изображений уже не доступны для объектов изображения? Можете ли вы получить размер изображения, вызвав службу Liferay в шаблоне вашей JournalArticle? 01.09.2011

Ответы:


1

Вы можете создать хук-плагин и переопределить его (возможно, этот файл)

/portal/portal-web/docroot/html/portlet/image_gallery/view_folders.jsp

Там вы можете добавить код, чтобы игнорировать вашу «системную» папку, если она существует. Возможно, все «системные» папки могут иметь одинаковое имя (например, «_SYSTEM_FOLDER_»), с которым вы можете протестировать.

Обратите внимание, что это просто скрывает папки, поэтому, если кто-то знает идентификатор папки и имеет разрешение на его просмотр/редактирование, он может создать URL-адрес для доступа к нему.

17.11.2011
  • Согласитесь, кажется, самое простое решение... оно будет хорошо ремонтопригодно. Игра с разрешениями вызовет много проблем в будущем развитии 18.11.2011
  • @Мартин Гамулин: Спасибо за этот ответ. Это будет абсолютно работать, но также нуждается в настройке в select_folder.jsp и, возможно, в некоторых других jsps. В конце концов мы решили внести исправления в IGFolderLocalServiceImpl и InlineSQLHelperImpl.replacePermissionCheck, убедившись, что все системные папки (на самом деле существует более одного имени системной папки) фильтруются должным образом. 22.11.2011
  • Новые материалы

    Введение в контекст React
    В этом посте мы поговорим о Context API, который был представлен в React 16, и о том, как вы можете их использовать. Что такое контекст? Глядя на определение из react docs , оно..

    Шлюз с лицензией OSS, совместимый с Apollo Federation v2, появится в WunderGraph
    Сегодня мы рады сообщить, что мы сотрудничаем с поддерживаемой YC Tailor Technologies, Inc. для внедрения Apollo Federation v2. Реализация будет лицензирована MIT (Engine) и Apache 2.0..

    Это оно
    Ну, я официально уволился с работы! На этой неделе я буду лихорадочно выполнять последние требования Думающего , чтобы я мог сосредоточиться на поиске работы. Что именно это значит?..

    7 полезных библиотек JavaScript, которые вы должны использовать в своем следующем проекте
    Усильте свою разработку JavaScript Есть поговорка «Не нужно изобретать велосипед». Библиотеки — лучший тому пример. Это поможет вам написать сложные и трудоемкие функции простым способом...

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

    C в C.R.U.D с использованием React-Redux
    Если вы использовали React, возможно, вы знакомы с головной болью, связанной с обратным потоком данных. Передача состояния реквизитам от родительских компонентов к дочерним компонентам может..

    5 обязательных элементов современного инструмента конвейера данных
    В цифровом мире предприятия используют конвейеры данных для перемещения, преобразования и хранения огромных объемов данных. Эти конвейеры составляют основу бизнес-аналитики и играют..