Как использовать оператор switch с вложенным оператором if с несколькими значениями OR - PullRequest
0 голосов
/ 28 марта 2019

Я создаю новый веб-сайт, который будет работать как CRM для компании, в которой я работаю, когда сотрудник приходит посмотреть на одного клиента, и я хочу, чтобы этот сотрудник мог видеть только этого клиента.если у них есть разрешение.Пользователь может получить разрешение несколькими способами, когда он входит в систему, сеанс запускается с уровнем безопасности, который связан с базой данных.Допустим, у пользователя есть уровень безопасности 2, то есть продажи.Они могут просматривать клиента, НО они не могут видеть другого лидера по продажам, поэтому мне нужно проверить, был ли ему назначен этот клиент или ему предоставлен доступ к нему, или им был предоставлен однократный доступ для просмотра этого лидера.Я борюсь с лучшим способом справиться с этим, я думал, что прибил это, но кажется, что я неправильно понял.

Любой шанс, что кто-то может взглянуть ниже и сообщить мне, где / чтоЯ делаю неправильно

Я уже пробовал оператор Switch с вложенными операторами IF, также используя OR, что, я думал, сработает.

Приведенный ниже код является оператором switch, я выбираю общий идентификатор пользователя и получаю доступ к идентификатору пользователя из 2 разных баз данных, и я проверил, что они возвращают правильные результаты.

switch ($_SESSION['user_security']) {
    case '0': break;
    case '1': break;
    case '2': 
    if ($_SESSION['user_name'] != $assigned OR $_SESSION['user_id'] != $share['shareUserId'] OR $_SESSION['user_id'] != $access['userId']) {
        die("<center><h1>You Do Not Have Permission!</h1></center>");
    }
    break;
    default: 
    if ($_SESSION['user_id'] != $share['shareUserId'] OR $_SESSION['user_id'] != $access['userId']) {
        die("<center><h1>You Do Not Have Permission!</h1></center>"); break;    
    }
}

Обновление Итак, я вывел свои переменные на экран, просто чтобы я мог видеть, как работает система, и это то, где я действительно запутался!

nameisAssigned = имя_пользователя == назначено Джон Доу == Джон Доу

userIdMatchesShare = user_id == shareUserId 8 ==

userIdMatchesAccess = user_id == accessUserId 8 ==

Итак, как вы можете видеть сверху, первая переменная nameIsAssigned имеет значение true, но две другие не могут найти идентификатор для общего доступа или доступа, что означает, что они не существуют.Так что это должно равняться истине и позволять пользователю проходить, потому что одно из трех условий верно, но, как я уверен, вы догадались, оно не пропускает пользователя ... Есть идеи, почему?

1 Ответ

0 голосов
/ 28 марта 2019

Часто это помогает разбить большие выражения на их компоненты и думать позитивно («когда пользователь может получить доступ», а не «когда он не может»).Ваш код эквивалентен

$nameIsAssigned = $_SESSION['user_name'] == $assigned;
$userIdMatchesShare = $_SESSION['user_id'] == $share['shareUserId'];
$userIdMatchesAccess = $_SESSION['user_id'] == $access['userId'];

$canAccess = ($nameIsAssigned AND $userIdMatchesShare AND $userIdMatchesAccess);
if (!$canAccess) ....

Похоже, вы хотели, чтобы он был

$canAccess = ($nameIsAssigned AND ($userIdMatchesShare OR $userIdMatchesAccess));
...