管理画面でログインユーザごとに操作制限する -EC-CUBE-

"EC-CUBE"には管理画面にログインできるユーザを作成することができ、スーパーユーザか、それとも閲覧だけのユーザなのかなど操作制限が与えられるインターフェイスがありながら、実際には機能していないので使えるように調整することにした。

小規模なECサイトだと管理画面にログインできるユーザを限定して運営しているところも多いが、大規模なところになるとECサイトの設定に関わるところは触らせたくないとか、発注者が見えないようにしてアルバイトに在庫管理だけさせたいといった要望がある。


まずは管理画面でユーザを作成し、デフォルトの"管理者"に対して操作制限する"運用者"というユーザを作成する。

"EC-CUBE"とは別にインストールしておいた"phpPgAdmin"でレコードを確認すると、"authority"に違いがあるのがわかる。

ちなみに"dummy"というユーザもデフォルトで入っているようだが、"del_flg"が立っているので利用できない状態にある。

 権限の状態


次にソースを修正する。

管理画面の各ページにはログイン状態にあるかどうかのチェックが実行されているので、これにプラスして権限情報も取得するようにする。

幸いなことに、クラスファイルの"SC_Session.php"に下記の記述があるので下準備は完了しているようだ。


$this->authority = $_SESSION['authority']; // 管理者:0, 一般:1, 閲覧:2



後は権限で振り分けたいページそれぞれにスクリプトを追加する。

例えば管理画面にログイン直後に表示されるページのクラスファイル"LC_Page_Admin_Home.php"でユーザ権限によるメニューの表示を変える。

元のソースでは下記のようになっている。


$objSess = new SC_Session();

// 認証可否の判定
SC_Utils_Ex::sfIsSuccess($objSess);



この「認証可否の判定」の下に下記のようなソースを追記する。


// 認証可否の判定
SC_Utils_Ex::sfIsSuccess($objSess);

//権限取得
$this->thisAuth = $objSess->GetSession('authority');
//管理者以外はエラー
if($this->thisAuth != 0){
SC_Utils::sfDispError("error");
}



実質は「権限取得」とコメントした下の一行があればよいが、もし管理者権限以外のユーザがアクセスした場合にエラー画面に遷移させる場合は「管理者以外はエラー」とコメントした下の三行を明記する。

管理者権限は"0"で登録されるので、"0"以外の権限はエラーという処理になる。

「SC_Utils::sfDispError()」はエラー画面に飛ばすので、次の画面が表示される。

  システムエラー時の画面


また、テンプレートファイルのSmarty側では「$thisAuth」を参照すれば条件分岐が可能となる。

メニューボタンが表示される「subnavi.tpl」に下記のような分岐文を書くことで管理者とそれ以外で表示を変えることができる。



管理者だけに表示するコンテンツ



ユーザ権限を作るインターフェイスは実装されていないが、閲覧だけや登録はできるが削除はできないといった細かな権限をカスタマイズするなりすれば大人数でECサイトを運営することも十分可能だ。

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 3

なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー)
ガッツ(がんばれ!)

この記事へのコメント

この記事へのトラックバック