質問: いつもお世話になっています。 用語の使い方がおかしいかもしれない点があり、ご容赦願います。 みなさんにお世話になったりしながら、PHPとMySQLで、ちょっとした社内の業務システムのようなものを作成しています。 そのシステムにログインするときに、店舗用のアカウント、ID、パスワードで事前に登録しているMySQLのデータベースの内容と照会、認証して、セッションでログイン状態を維持する仕様です。(これまでMD5でハッシュ化していたのですが、password_hash()でハッシュ化することにしました。) ●アンケート画面は店頭で使います。誰でも見れるものではなく、店頭のIPADなどで、店舗用のアカウントで事前にログインした状態で、入力ができるものになります。入力が終われば、いくつかの画面を経て、また次の入力画面に戻ります。 ●アンケートの項目を増やしたり、削除したり、修正したり、並び替えたりの画面や処理は上記のような一覧の流れで行わなくてよいので、最初からログインID、パスワード、権限を管理者用のものを用意して権限の違いで制限しています。 ここで困ったことに、 ●その日のアンケートの集計やグラフを管理者ではなくスタッフが見たい場合に、アンケートをとれる店舗用のアカウントでログインした状態で、そのアンケートの集計やグラフが見れる特定のページに対して、スタッフ用のアカウント(ID、パスワード)でログインしたいという要望がでてきました。その集計などの画面を見終わって、ログアウトする(画面を移る)と、全体のアンケート画面へログインした状態に戻りたいという希望です。 自分の知識では、ログインしてから、ログアウトまでセッションで維持する場合に、そこに別のログインが加わるというイメージがわきません。 実際には、上記を行うような方法があるのでしょうか? 勉強すべき内容や、考え方、方法を変えるべき点などお知恵をお借りできればと思います。 よろしくお願いします。 追記させていただきます。 現時点のイメージとして セッションでログインを維持している場合、 店舗アカウントでログインした状態で、加えてスタッフアカウントでログインしたら、店舗アカウントはログアウト状態になるという理解でいいでしょうか? スタッフアカウントのページから、ボタン一つで店舗アカウントでみれるページに移行する(そのときはID、パスワードの入力なし)としようとすると、スタッフページの戻る部分のコードに店舗アカウントのid、パスワードの記載をするようなイメージになり、それをしてもいいものか悩みます。
回答: 自分はこのシナリオはマルチテナントと考え方が似ていると思います。 PHPではありませんが、私も今現在作っているシステムでクライアント(店舗に相当)を特定した後にログインする、というプログラムを組んでいます。私のプログラムはクライアントの特定にURLの解析を使っていますが、これは必ずしもURL解析の必要はありません。 クライアントを特定後、クライアント毎にセッション管理を行うことでクライアント別にログインスタッフを識別しています。 仮にスタッフログインをしていたとして、途中でログインクライアントを変えることがあっても、セッションの中身が切り替わるので別クライアントではスタッフとしては未ログインの状態になります。 こうすることで二重ログインの構造が明確になると思います。