0

ユーザーがサインアップすると、デフォルトの「member_type」が「User」として与えられます。header.php に格納されている関数を使用して、$_SERVER['SCRIPT_NAME'] を使用して、「ユーザー」および認証されていない訪問者から特定のページへのアクセスを制限しようとしています。

コンセプトはしっかりしていますが (私はそう信じています)、ロジックを解決するために新鮮な目が本当に必要です。

ヘッダーの関数は次のとおりです。

$basicAuth = array("member.php", "order.php", "logout.php");
    $adminonly = array("admin.php", "v_feedback.php", "user.php", "v_content.php", "product.php");


    restrictAccess($basicAuth, $adminonly);

そして、ここに関数全体があります:

function restrictAccess($basicAuth, $adminonly){
$error = "You do not have the authentication privileges to access this area, go <a href=\"index.php\" alt=\"Home\">home</a>.";

    if (isset($_SESSION['type'])){
        $auth = "Basic";

        if($_SESSION['type']=="Admin"){
            $auth = "Admin";
        }
    } else {
        $auth = "None";
    }

    //For testing purposes
    echo $auth;



if ($auth == "None"){
    if(($_SERVER['SCRIPT_NAME']==$basicAuth)||($_SERVER['SCRIPT_NAME']==$adminonly)){
        echo $error;
        exit();
    }
}elseif($auth =="Basic"){
    if(($_SERVER['SCRIPT_NAME'])==$adminonly){
        echo $error;
        exit();
    }
}

}

私がそれを構築した方法の背後にあるロジックと関係があると感じていますが、これは間違いです。

ありがとうございました。

4

1 に答える 1

0

if($_SERVER['SCRIPT_NAME']==$basicAuth)は完全に間違っています。配列と文字列を比較することはできません。 if(array_search($_SERVER['SCRIPT_NAME'],$basicAuth) !== FALSE)機能しますが、値の代わりにキーを使用することをお勧めしますif(array_key_exists($_SERVER['SCRIPT_NAME'],$basicAuth))。ところで、「basicAuthNeeded.php」を一部のスクリプトに、「adminAuthNeeded.php」をその他のスクリプトに含めた方が、Your メソッドの代わりに簡単ではないでしょうか。それとも、より複雑で柔軟な方法を使用しますか (いくつかの役割を定義し、リソースを定義し、いくつかを使用しますcheckPermissions($role, $resource))?

于 2012-12-10T20:31:28.653 に答える