ユーザー管理の方法

一人で記事を書く場合なら、扱う範囲は自由に決められるのですが、複数人が書ける場合、範囲はある程度絞っておかないと収拾が付かなくなってしまうと思うのです。
で、ボカロ系を扱うのはサブサイトにまとめて、その周辺情報、例えばMMDとかUTAUとかはまた別のサブサイトにまとめようかと思うのです。
それぞれサブドメインにして。
最初の記事に書いたように、ベースシステムにはDrupal7を使うことに決めているのですが、ユーザー管理を含めたサイトをどうやって作ろうか悩みました。
各サブサイトには個別にサブドメインを割り振るとして、それぞれにDrupalを入れるのが一番簡単です。ただそれだと、ユーザー管理が別になってしまうので、「ボカロ版」と「MMD版」でユーザー登録を個別にしなくてはいけなくなってしまう。これでは不親切…。

Drupalにはたくさんのモジュールがあります。探してみると、シングルサインオンを実現するモジュール一覧、というそのものずばりのまとめ記事が見つかりました。

Comparison of Single Sign On (SSO) Modules | Drupal Groups

これを参考に、絞込みを行ないます。

(案1)TwitterやFacebook、Googleなどといった外部ログイン
外部IDを使ったログインを取れば、ユーザーから見たら同じログイン方式で全てにログインできるように見えます。 ただこれで実現するには自前で持たない(外部のIDを持っていなければ登録できない)ことになるのと、外部サービスに障害が起きたらこちらのログインにも影響がありそうなので、今回は見送ります。

(案2)OpenIDやOAuthといったWeb標準技術を使って連携する
標準技術なので汎用性はあるのですが、基本的に完全別管理のシステムを連携するために作られているので、ユーザーにとってはわかりにくかったり使いづらかったりするのが難点です。
今回は見送ることにします。

(案3)ひとつのDrupalシステムで別ドメインのデータも管理できるDomain Accessモジュールを使う
実際は一つのDrupalですが、サブドメインや別ドメインからアクセスできるようにするモジュールらしいです。 シングルサインオンではないので上のまとめ記事には載っていませんが、最初シングルサインオンを求めていて、結局これを導入することにしたサイトが多いようです。
実際、Drupalのサイトではモジュールのインストール数が見れるのですが、このモジュールは11822とかなり導入されていることが伺えます。
これはいいかなとちょっと思ったのですが、設定がややこしそうなのでちょっと躊躇。
そして、もう少し調べたらこれだとあくまで「別名」を付けるだけで、一つの記事にURLが二つ存在するようになってしまうみたいです。SEO的にどうなのか不安ですし、何より利用者が混乱しそう。
設定で何とかできるかもしれないですが、これも見送り…かなあ。

(案4)サブドメイン限定でユーザー情報やログインを共有できるBakery Single Sign-On Systemモジュールを使う
マスター・スレーブ型のユーザー共有モジュールのようです。
マスター側にユーザー登録して、スレーブ側にアクセスすると、クッキー経由で自動でユーザー情報を引っ張ってきてくれるとのこと。採用サイトは500ちょっと。
「ユーザー管理」用システムを立ててマスターにすれば導入できそうです。共有できるユーザー情報は、メールアドレスとユーザー名など、最低限です。その他のプロフィール項目はシステム毎個別管理になりそう。
疎結合になるしよさげに思えます。問題は、ユーザーアカウントの削除を連携させるのが難しいことと、ユーザーインタフェースの作り方によってはわかりにくくなってしまうかもしれないという点。

シングルサインオンを実現するモジュール自体は他にもありますが、案4がよさそうに思えます。
ううん悩ましい。
Drupalは、何をやるにしても大抵手段が複数用意されているので、選択の自由がある――逆に言うと、選択しなくてはいけない難しさがあります。

今回は、サブドメイン限定という制限は問題なさそうなので、比較的シンプルで他のシングルサインオンシステムに比べ導入数も多いBakery Single Sign-On Systemを採用する方向で進めてみます。
ユーザーアカウントの削除をどうするかですが、将来的に自動で同期させるように作りこむとして、とりあえず最初は、管理者による手動削除でいいかな、と。
ユーザーが削除できないようにしておいて、マスターサイトにアカウント削除申し込みフォームを設置して、ここから申し込みをしてもらい、管理者が削除する、という方向で考えてみます。

コメント

タイトルとURLをコピーしました