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}-->';"

でもいいかもしれません。
(動作確認していませんが)