0

我正在尝试编写一个条件来检查特定参数和用户凭据。如果用户没有两个凭据之一并传递了正确的参数,他们将被转发到安全登录屏幕。

这就是我所做的工作:

if ($request->getParameter('profile_type') == 'foo' && !$this->getUser()->isAdmin())  {
      return $this->redirect('sfGuardAuth/secure');
    }

但是我添加了一个新的用户组,所以我需要这样的东西:

if ($request->getParameter('profile_type') == 'foo' && (!$this->getUser()->isAdmin() || !$this->getUser()->isFaculty())  {
      return $this->redirect('sfGuardAuth/secure');
    }

因此,如果您不是管理员或教职员工,您将获得重定向。

这是语法还是逻辑问题?

更新

这是有效的,但在逻辑上似乎是错误的

if (($request->getParameter('profile_type') == 'foo') && (!$this->getUser()->isAdmin() && !$this->getUser()->isFaculty())) {
            return $this->redirect('sfGuardAuth/secure');
    }
4

2 回答 2

1
(!$this->getUser()->isAdmin() || !$this->getUser()->isFaculty())

应该

!($this->getUser()->isAdmin() || $this->getUser()->isFaculty())

更新,有更多解释:如果两者都返回 false,则要重定向用户,如果两者都是isAdminisFaculty则不重定向。

如果两者都是假的:

!(false || false)== !false== true=> 重定向
!(true || false)== !true== false=> 没有重定向

于 2012-06-08T08:06:01.133 回答
0

只是为了回答这个问题,这就是我要工作的内容:

if (($request->getParameter('profile_type') == 'foo') && (!$this->getUser()->isAdmin() && !$this->getUser()->isFaculty())) {
            return $this->redirect('sfGuardAuth/secure');
    }

我不确定 OR/AND 运算符如何工作以获得所需的结果,但它确实有效,所以这是一个不错的折衷方案。

于 2012-07-26T21:43:59.677 回答