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

问题描述 投票:0回答:1

我正在建立一个新的网站,作为我工作的公司的CRM运行,当一名员工来查看单个客户时,我希望该员工只允许查看该单个客户允许。当用户使用链接到数据库的安全级别启动会话时,有多种方式可以获得权限。因此,假设用户具有安全级别2,即销售额。他们可以查看客户,但他们无法查看其他销售人员的负责人,因此我需要检查他们是否已分配给该客户,或者该客户是否已与他们共享,或者他们是否已获得一次访问权限以查看该潜在客户。我正在努力解决这个问题的最好办法,我以为我已经把它钉了下来,但似乎我错了。

任何人都可以在下面看看,让我知道我在哪里/做错了什么

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

下面的代码是switch语句,我从两个不同的数据库中获取共享用户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 = user_name ==指定John Doe == John Doe

userIdMatchesShare = user_id == shareUserId 8 ==

userIdMatchesAccess = user_id == accessUserId 8 ==

因此,从上面可以看到第一个变量nameIsAssigned为true,但是其他两个变量找不到共享或访问的ID意味着它们不存在。所以这应该是真的,并允许用户通过,因为三个条件之一是真的,但我确定你猜对了,它不允许用户通过......任何想法为什么?

php session permissions switch-statement
1个回答
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));
© www.soinside.com 2019 - 2024. All rights reserved.