PHP-специфичный контент и перенаправления - PullRequest
0 голосов
/ 21 апреля 2011

У меня есть этот код

$pageEx = explode("/", $_SERVER['PHP_SELF']);
            $pageLn = count($pageEx);
            $currentdir = $pageEx[$pageLn - 2];

            switch($currentdir) {
                case "admin":
                    if(!$this->loggedIn) {
                        header("Location: index.php");
                    }
                    if($this->userData['user_level'] < 3) {
                        header("Location: ../index.php");
                    }
                break;

                case "mgmt":
                    if(!$this->loggedIn) {
                        header("Location: index.php");
                    }
                    if($this->userData['user_level'] < 2) {
                        header("Location: ../index.php");
                    }
                break;

                case "user":
                    if(!$this->loggedIn) {
                        header("Location: index.php");
                    }
                    if($this->userData['user_level'] < 1) {
                        header("Location: ../index.php");
                    }
                break;
            }

, и мне было просто интересно, есть ли более короткий способ, которым я мог бы это сделать?
Код работает, но много кода для чего-то такого простого.
Он проверяет каталог, в котором они находятся, если они не соответствуют нужному уровню пользователя, он перенаправляет их на страницу индекса.

Редактировать: Готово.

$pageEx = explode("/", $_SERVER['PHP_SELF']);
            $pageLn = count($pageEx);
            $currentdir = $pageEx[$pageLn - 2];


            /*
                User Level Required => Directory
            */
            $permissions = array(
                1 => 'user',
                2 => 'mgmt',
                3 => 'admin'
            );

            foreach($permissions as $perms => $key) {
                if(!$this->loggedIn) {
                    header("Location: ../index.php");
                }
                if($currentdir == $key) {
                    if($perms > $this->userData['user_level']) {
                        header("Location: ../index.php");
                    }
                }
            }

Ответы [ 2 ]

3 голосов
/ 21 апреля 2011

Как насчет этого?

$pageEx = explode("/", $_SERVER['PHP_SELF']);
$pageLn = count($pageEx);
$currentdir = $pageEx[$pageLn - 2];

if(!$this->loggedIn) {
    header("Location: index.php");
}

$permissions = array(
    'admin' => 3,
    'mgmt' => 2,
    'user' => 1,
);

if($this->userData['user_level'] < $permissions[$currentdir]) {
    header("Location: ../index.php");
}

ОБНОВЛЕНИЕ: Я только что заметил, что вы хотите сделать меньше, чем ... поэтому я обновил код, чтобы отразить, как он работает в вашемкод.

1 голос
/ 21 апреля 2011

Вы можете ограничиться этим, но вы можете уменьшить его до 6 строк, если длинное выражение if не беспокоит вас ...

$pageEx = explode("/", $_SERVER['PHP_SELF']);
$currentdir = $pageEx[count($pageEx) - 2];

if(!$this->loggedIn)
    header("Location: index.php");
elseif(($currentdir == "admin" && $this->userData['user_level'] < 3) || ($currentdir == "mgmt" && $this->userData['user_level'] < 2) || ($currentdir == "user" && $this->userData['user_level'] < 1))
    header("Location: ../index.php");

Обратите внимание на изменение elseif, потому что - ипоправьте меня, если я ошибаюсь - либо пользователь не вошел в систему и перенаправлен на index.php, либо пользователь вошел в систему и может быть перенаправлен на ../index.php.Если бы они были отдельными операторами if, похоже, что в итоге может быть два заголовка Location.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...