如何使用带有多个OR值的嵌套if语句的switch语句

时间:2019-03-28 11:07:19

标签: php session permissions switch-statement

我正在建立一个新网站,该网站将作为我所在公司的CRM,当一名职员来查看单个客户时,我希望只允许该职员查看该单个客户。如果他们有权限。用户登录会话时,可以通过多种方式获得许可,该会话以链接到数据库的安全级别启动。因此,假设用户的安全级别为2,即销售。他们可以查看客户,但不能查看其他销售人员线索,因此我需要检查是否为他们分配了该客户,或者是否已与该客户共享该客户,或者是否已授予他们一次查看该线索的权限。我正在努力管理此问题的最佳方法,我想我已经钉上了钉子,但似乎我弄错了。

只要有机会有人看下面,让我知道我在哪里/做错了什么

我已经尝试过使用OR嵌套嵌套IF语句的Switch语句,我认为这是可行的。

下面的代码是switch语句,我从2个不同的数据库中获取共享用户ID和访问用户ID,并检查了它们是否返回正确的结果。

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,但是其他两个找不到共享或访问的ID,这意味着它们不存在。所以这应该等于true并允许用户通过,因为这三个条件之一是正确的,但是正如我敢肯定,您肯定猜到了,它不允许用户通过... 知道为什么吗?

1 个答案:

答案 0 :(得分:0)

通常,它有助于将大型表达式分解为各个部分并积极思考(“用户何时可以访问”而不是“何时它们不能访问”)。您的代码等同于

$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));