我正在建立一个新网站,该网站将作为我所在公司的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并允许用户通过,因为这三个条件之一是正确的,但是正如我敢肯定,您肯定猜到了,它不允许用户通过... 知道为什么吗?
答案 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));