Profileモジュールを試してみた

ユーザー登録の時に様々な付加情報を収集したいことがある。

所属情報だったり、コンテンツのアクセス許可のために年齢情報が必要となることもある。書籍のフォローアップサイトであれば、購入証明を声明してほしい場合もあるだろう。

コンテンツタイプを新たに作って、ユーザーと紐付ける方法もあるが、コントリビューションモジュールにProfileがあるので、試しに使ってみたところ結構良い感じだったので記録しておく。プロジェクトページには以下のように書いてある。

Why use profiles instead of user account fields?
なんでユーザーアカウントに不イールドを追加する方法でなくprofilesを使うのか?

  • With profile, user account settings and user profiles are conceptually different things, e.g. with the “Profile” module enabled users get two separate menu links “My account” and “My profile”.
    “My account” と “My profile” の2つのメニューリンク(通常はMy accountページのタブ)に分離できるから
  • Profile allows for creating multiple profile types, which may be assigned to roles via permissions (e.g. a general profile + a customer profile)
    複数のprofileタイプを作ることができ、それぞれに異なったアクセス権限を定義できるから
  • Profile supports private profile fields, which are only shown to the user owning the profile and to administrators.
    特定のprofileフィールドをプライベート設定にできて、本人と管理者以外から見られないようにできるから

例えば、雇用関係をProfileタイプとして定義し、複数件の登録を可能にすると、本業と副業をそれぞれ定義することができ、そのメールアドレスのフィールドをプライベート設定にすると、所属先一覧は適当な権限で開放しつつ、個別のメールアドレスは見せないといったユースケースを実装できる。

以下は、試してみた概要である。

通常のインストール手順でモジュールをインストール、enableすると、権限設定ができるようになる。

画像

デフォルトでは、管理者以外にはアクセス権が無いので、自分のプロファイルは見らるようにしておく。

ついで、環境設定のユーザーからProfile typesを選択して、Add profile typeを押下する。

画像

適当な名前をつけて、Profile typeを追加する。この時、Include in user registration formにチェックすると、ユーザー登録申請フォームで、このProfile typeの情報を含めることができる。また、リビジョンを有効化することもできる。

画像

今回は、追加するフィールドは生年月日とした。

画像
画像

必要に応じて表示設定などを調整し、自分のユーザー情報を見に行くとpersonal profileのタブが新たに作成されていて、そこで生年月日を入力できるようになっている。

画像

profile typeはコンテンツタイプではないが、viewsで問題なく参照できる。以下は、確認用に作成したView。

画像

ログアウトして、新規アカウント登録をやってみると無事、生年月日の入力が求められている。

画像

登録、管理者承認を受けて、ログインしてアカウントページに行ってみると、予想に反して、personal profileタブが出てこない。

画像

管理者で権限を見ると、profile type毎に権限の設定が必要なことがわかるので、対応する。

画像

再度登録ユーザーでログインしてアカウント情報に行くとpersonal profileタブができていて、編集可能な設定にしたので、編集画面になっている。

画像

基本機能としては十分なので、実用できると感じた。なお、2022年10月9日の段階では、Make Profiles Translatableという課題があるが、状況を見る限りあまり心配する必要はないだろう。

タグ
feedback
こちらに記入いただいた内容は執筆者のみに送られます。内容によっては、執筆者からメールにて連絡させていただきます。