問題
-
ケース1:Liferayポータルにユーザーを作成する場合
- groupIdと同じ画面名のユーザーを作成しようとすると、 "Please enter a valid Screen name" 例外がUIに発生し、ユーザーが作成されない。
-
ケース2:LDAPからユーザーをインポートする場合
- groupIdと同じスクリーンネームを持つユーザーをインポートしようとすると、以下のエラーが発生し、Liferayポータルにユーザーがインポートされないことがあります。
com.liferay.portal.kernel.exception.UserScreenNameException$MustNotBeUsedByGroup: Screen name 00512762 for user 1896464 must not be used by group 512762
環境
- Liferay DXP 7.0
これは、すべてのLiferayバージョンに適用されます。
解像度
- これはLiferayの意図した動作です。 その理由は、以下の通りです。
-
スクリーンネームに数字が使えるようになると、URLの衝突が起こる可能性があります。
-
下の例で説明します。
- サイトのgroupIdの値が10000の場合、このサイトにアクセスするための次のURLは次のようになります:
/ web / 10000 / home - あるユーザーが10000の値を持つスクリーンネームを持つ場合、次のURLでそのユーザーの個人サイトにアクセスすることができます:
/web/10000/home - そのため、ユーザーとサイトが共存できないのは、あいまいさが生じるからです
- サイトのgroupIdの値が10000の場合、このサイトにアクセスするための次のURLは次のようになります:
-
下の例で説明します。
-
スクリーンネームに数字が使えるようになると、URLの衝突が起こる可能性があります。
-
スクリーンネームとgroupIdの衝突を回避するために、以下のような代替手段をとることができます:
1. 最初のアプローチは、 LPS-15255,で紹介されています。- つまり、Liferay Databaseにある "Counter "テーブルで、"com.liferay.counter.model.Counter "の値を現在の値からスクリーン名の可能範囲外のものに変更します。 この変更後、新しく作られるサイトや組織は、この新しい番号に基づくため、スクリーンネームと競合することはありません。
- 例えば、screenNameフィールドに特定の文字を自動的に付加するようなロジックを記述することができる。 例. screenName:10000の場合、screenNameを "10000_i "に変更することができる。
- 上記の2つのアプローチは、Groovyスクリプトを作成することで実現できます 徹底的なテストと影響を受ける領域を検討します。
追加情報
LiferayはDBを手動で操作することを強く推奨していないため、どちらのアプローチもgroovyスクリプトを書く必要があり、チームの強い意志で実装する必要があることに注意してください。 Liferay サポートは、カスタマイズの設計や実装を支援することはできません。
- 上記の作業を行う前に、データベースのバックアップをとってください。