我正在建立一个新的网站,作为我工作的公司的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意味着它们不存在。所以这应该是真的,并允许用户通过,因为三个条件之一是真的,但我确定你猜对了,它不允许用户通过......任何想法为什么?
通常,有助于将大型表达式分解为组件并进行积极思考(“用户何时可以访问”而不是“何时不能”)。你的代码相当于
$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));