EC-CUBEで管理者のアクセス権限を設定する
一、管理画面で「システム設定」→「マスタデータ管理」と遷移。
「mtb_authority」を選択する。
idは管理者が「0」その次は「1」と順に番号を振っていく。
※id=「0」はすべてのページにアクセスできます。
以降、idの数字が小さい者から順に広範囲のアクセス権限を指定できます。
値はお好きなものを。
二、次に同ページ上で「mtb_permission」を選択。
各ページへのアクセス権限を指定します。
IDはアクセス制限したいページの「/admin」以下のURL
たとえば「/admin/order/index.php」で受注管理画面へのアクセスを制限できます。
値は権限レベルのこと。
「mtb_authority」で指定した「id」以上の値が設定されているところにのみアクセスできます。
ex)「mtb_authority」の「id」が「1」なら「mtb_permission」の「値」が「1」以上のページにしかアクセスできません。
三、/data/class/SC_Session.phpの/* 認証成功の判定 */部分を以下のように変更します。
/* 認証成功の判定 */ function IsSuccess() { global $arrPERMISSION; if($this->cert == CERT_STRING) { $masterData = new SC_DB_MasterData_Ex(); $arrPERMISSION = $masterData->getMasterData("mtb_permission"); // 現在のパスを取得し、比較用に整形 $now_path = ereg_replace('(^'.URL_DIR.')', '/', $_SERVER['PHP_SELF']); if(isset($arrPERMISSION[$now_path])) { //if(isset($arrPERMISSION[$_SERVER['PHP_SELF']])) { // 数値が自分の権限以上のものでないとアクセスできない。 if($arrPERMISSION[$now_path] < $this->authority) { //if($arrPERMISSION[$_SERVER['PHP_SELF']] < $this->authority) { return AUTH_ERROR; } } return SUCCESS; }
これで、メンバー管理から管理権限を設定すると
アクセス制限ができるようになります。
参考: http://www.japan-b.com/blog/?p=888
と、ここまでは参考サイトとまったく一緒なのですが、
このままだと、アクセスエラーになった際に毎回ログインをしなおさなければなりません。
ので、追加で以下のように変更します。
四、/data/class/pages/error/LC_Page_Error_DispError.php
case AUTH_ERROR: $this->tpl_error="このファイルにはアクセス権限がありません。<br />もう一度ご確認のうえ、再度ログインしてください。"; $this->return_top = false; break;
五、/data/Smarty/templates/default/admin/login_error.tpl
ボタンのonclick部分です。
<!--{if $return_top}--> onclick="location.href='<!--{$smarty.const.URL_LOGIN}-->';" <!--{else}--> onclick="javascript:history.back();" <!--{/if}-->
これで、アクセス制限に引っかかっても直前のページに戻れます。
※history.back()してるだけなので、再送信しないとなりません。
(IEだと一度真っ白になってしまうので更新が必要です。)
それが嫌なら
onclick="location.href='<!--{$smarty.server.HTTP_REFERER}-->';"
でもいいかもしれません。
(動作確認していませんが)