問題
- Liferay DXP 7.0および7.1では、特定のロール(例えば、通常/非管理者、サイトユーザー)に対して、製品メニュー(およびそれを開くためのアイコン)を非表示にする必要があることがあります:
環境
- Liferay 7.0 DXP
- Liferay 7.1 DXP
解像度
- Liferay DXPは、この要件をすぐに実現する方法を提供しません。
- カスタマイズで目的の動作を実現することは可能です。 この要件に対するアプローチには、大きく分けて2つの方法があり、どちらもつながっています。
1. カスタムテーマ
カスタムテーマの portal_normal.ftl
で、 <@liferay.control_menu />
タグを、以下のようなパーミッションチェックで囲みます:
<#if is_signed_in>
<#assign roles = user.getRoles()
showcontrolmenu = false
/>
<#list roles as role>
<#if role.getName() == "Administrator" || role.getName() == "Other Role" >
<#assign showcontrolmenu = true />
<#break>
</#if>
</#list>
<#if showcontrolmenu>
<@liferay.control_menu />
</#if>
</#if>
この代わりに、必要なコードをテーマの init.ftl
で構築することもできます:
permission_checker = themeDisplay.getPermissionChecker()
is_group_admin = permission_checker.isGroupAdmin(group_id)
is_omniadmin = permission_checker.isOmniadmin()
show_dockbar = is_group_admin || is_omniadmin
して使用します:
<#if show_dockbar>
<@liferay_ui["quick-access"] contentId="#main-content" />
<@liferay_util["include"] page=body_top_include />
<@liferay.control_menu />
</#if>
を、 portal_normal.ftl
. また、製品メニューのマージンは、変更後に調整が必要になる場合があります。 main.css
の中に、以下のようなものがあります:
@media only screen and (min-width:768px){
body.open #wrapper{
padding-left:0px;
}
}
は、視覚的なギャップを解消するのに役立つと思います。
2. コントロールメニューエントリー / テーマコントリビューター / テンプレートコンテキストコントリビューター
この方法については、関連するチュートリアルの一覧を紹介します:
- テーマ提供者
- コントロールメニューのカスタマイズ
- あなたのサイトに独立したUIリソースをパッケージングする
- コントロールメニューの入力
- テンプレート コンテキスト コントリビューター テンプレート
- テンプレートに追加のコンテキスト変数と機能を注入する
上記に加え、いくつかの地域資源を紹介します:
注意:どちらの場合も、(少なくとも)「サインアウト」(/c/portal/logout)オプションが必要です:
をポータルのテーマで別の場所に移動する必要があります。そうしないと、製品メニューが無効になっているため、アクセスできなくなります。
追加情報
- 製品メニューは最新のリリースで通常のユーザーロールから切り離されたため、Liferay DXP 7.2+ではこの問題は発生しなくなります。
- 提供されるリソースは、カスタム開発のための純粋なヒントであり、実装は各開発者の裁量に任されます。