通常の管理者以外のユーザーが他のユーザーのメールを表示できるようにするにはどうすればよいですか?


8

メールはコアに含まれるフィールドになりましたが、ユーザー向けのストックメールは非公開に設定されているようです。管理者権限を持つユーザーまたはユーザー自身のみが表示できます。

他のユーザーがこの基本的なフィールドを表示できるようにしたいのですが、誰かが他の情報を他のユーザーからコピーして、単に表示できるようにするための別の電子メールフィールドを作成する必要はありません。

これはかなり簡単で一般的な方法ですが、まだ何も見つかりません。

通常の管理者以外のユーザーが他のユーザーのメールを表示できるようにするにはどうすればよいですか?


1
15年間Webを開発してきましたが、文字どおり一度も人々の電子メールアドレスが公開されているWebサイトにアクセスしたことはありません。これは一般的な方法だとはまったく思いません。既存の解決策を見つけるのに苦労しているのはこのためかもしれません。必要なコンテキストでその要素のアクセスを変更することは、おそらくコードを使用すると非常に簡単ですが、ユーザーがこの情報をどこに「見る」必要があるのでしょうか。たとえば、他のフィールドのあるプロフィールページでは?
クライヴ

メールが他のユーザーに表示されないのは、単にスパムを回避するためです。また、アカウントの作成に使用したメールを表示することはお勧めできません。@Cliveがメールアドレスを表示することはそれほど一般的ではないことに同意します。
kiamlaluno

2
ユーザーのメールフィールドを一般に公開したくない。しかし、12年間に渡っていくつかの連邦省庁、多数のNGO、および多数の学校システムで働いていました-同僚の一般的な連絡先情報(プライマリメールを含む)を他の認証済みのユーザーが利用できるようにすることは非常に一般的な方法ですユーザー。このメールを提供する標準的な方法がユーザーの登録済みアカウントのメールとは別のエンティティであるというあなたの場合、私はそれを受け入れることができます。
W0LF 2016年

回答:


1

同様のユースケースがありました。別の解決策は次のとおりです。ユーザーのプロファイルに新しい電子メールフィールドを追加し、カスタムモジュールで(これはDrupal v8.1です)、hook_user_presaveSee Drupal Apiを使用します。

function MYMODULE_user_presave(User $user){ $user->set('field_profile_email', $user->getEmail()); }

次に、質問へのコメントで述べたように、この新しいフィールドをビューの、たとえば部門の連絡先リストで使用できます。フィールド権限を使用して、これをさらに拡張することもできます。

これには2番目のフィールドを作成することの欠点がありますが、この関数は手動でコピーする必要がなく、どこからでも使用できるようになりました。


1
保存または更新されたメールはコピーされますが、メールフィールドに既に存在する場合はコピーされません。
thethe 23

正しい。これは、データベースに既に存在するユーザーには影響しません。そのためには、それらを再保存する必要があります。
Belouche

6

あなたが取ることができる一つのルートは、ユーザーに許可することで表示し、ユーザ情報の権限を、ユーザーのプロフィールページにこの情報が表示されます。

そのためには、テーマのuser.html.twigをオーバーライドし(core / modules / user / templates / user.html.twigからテーマのテンプレートディレクトリにコピーします)hook_preprocess_user()mytheme.themeファイルを介してテンプレートにメールを挿入します。 :

/**
 * Implements hook_preprocess_user()
 */
function mytheme_preprocess_user(&$variables) {
  $variables['mail'] = $variables['user']->getEmail();
}

この例では、ユーザー{{ mail }}がemail変数をユーザープロファイルテンプレートに挿入できるようになります。


ありがとうございます。しかし、ビューを使用して電子メールフィールドを表示できるようにする方法はありますか?ユーザーディレクトリは、ユーザーが連絡先情報を検索する主要な方法です。
W0LF 2016年

1
ビューの同等の回避策は、ユーザーの電子メールをビューフィールドに挿入するためのhook_preprocess_views_view_fieldのようなものです。
Shawn Conn

1
$ variables ['user']-> getEmail(); これは、現在ログインしているユーザーのメールのみを返します。
tasqyn

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.