Как отменить php if или заявление - PullRequest
0 голосов
/ 10 февраля 2019

На одном из моих веб-сайтов я использую следующую инструкцию if:

if (isAdmin() || (isSupporter() && hasRight("XXX")) {
    echo "<a href='/page'>Menu</a>";
}

Эта инструкция используется для определения, может ли пользователь видеть ссылку в основной навигации.Это будет верно для пользователя, который является либо администратором, либо сторонником с данным правом.

Сейчас я пытаюсь опровергнуть это утверждение, чтобы запретить пользователям доступ к странице, на которую ведет ссылка.Это значит, что я пытаюсь найти оператор if, который вернет false, если пользователь не является ни администратором, ни сторонником с данным правом.До сих пор я использовал следующее утверждение:

if (!isAdmin() || !isSupporter() || !hasRight("XXX")) {
    die();
}

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

1 Ответ

0 голосов
/ 10 февраля 2019

Во-первых, && имеет приоритет над || (например, * и +).Таким образом, вы можете удалить 1 пару круглых скобок:

if ( isAdmin() || isSupporter() && hasRight("XXX") )

Простое отрицание заключается в добавлении круглых скобок и отрицании полного выражения.

if ( !( isAdmin() || isSupporter() && hasRight("XXX") ))

Отрицание логического выражения означает отрицание всех элементов.и обмен && и ||.По приоритетным причинам вам нужно добавить круглые скобки (как здесь) или вы можете удалить их.

if ( !isAdmin() && ( !isSupporter() || !hasRight("XXX") )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...