問題
- MyAccountPortletへのアクセスは、様々なユーザーが自分のデータを修正できないように制限することを試みました。
-
com_liferay_my_account_web_portlet_MyAccountPortlet
の User および Owner ロールの権限を削除したにもかかわらず、Sign In ポートレット経由でデータを表示および編集できることが判明しました:-
Sign In」ポートレットを使用すると、ユーザーは自分のアカウント設定ページにアクセスすることができます。 彼らが認証(ログイン)した後、通常テキストにはこう書かれています:
あなたは テストとしてサインインしています。
-
また、リンクをクリックすると、一見権限がないように見えるにもかかわらず、アカウント設定に移動します。
-
- このポートレットへのアクセスを制限するにはどうすればよいですか?
Environment
- Liferay DXP 7.3
解決策
- 観察された挙動はデザインによるものです。
- 認証されたすべてのユーザーは、自分のデータを閲覧し設定することができます。 (自分たちのデータのみ! UserPermissionImplの条件(permissionChecker.getUserId() == userId) でこれを保証します。) この行動は、期待されていると考えられます。 参照元: https://github.com/liferay/liferay-portal/blob/master/portal-impl/src/com/liferay/portal/service/permission/UserPermissionImpl.java#L121
- 個人メニューにアクセス」パーミッションの取り消しにより、ユーザーの個人メニューにページを表示させないようにしますが、誰もが自分のデータを閲覧・設定できる権利は残ります。 (もちろん、アカウント設定ページへのリンクを所有することが必要です)。
- 結論から言うと、この動作は意図的なものであり、これを変更すると他の機能が壊れてしまう。 サインインウィジェットでアカウント設定ページが表示されないようにするために、以下の回避策を提案することができます:
- サインインウィジェットをページから削除する。 アカウント設定ページは、レンダリングするためにURLにポートレット認証トークン(p_p_auth)が存在する必要があるため、作り物のURLでアクセスすることはできません。 ポータルが生成したURLの場合、認証トークンは自動的にURLに追加されます。
- サインインウィジェットをフラグメントモジュールでカスタマイズして、リンクを削除する。 デザイン上の理由やその他の理由で、サインインウィジェットがページの一部でなければならない場合は、アカウント設定ページへのリンクを停止するようにカスタマイズする必要があります。 参照元: https://github.com/liferay/liferay-portal/blob/master/modules/apps/login/login-web/src/main/resources/META-INF/resources/login.jsp#L28