当一个操作调用另一个操作时,CakePHP身份验证组件不工作

当一个操作调用另一个操作时,CakePHP身份验证组件不工作,cakephp,authentication,Cakephp,Authentication,所以我有一个例子,我有一个动作(基于某些条件)会在同一个控制器中切换到另一个动作 现在,具有给定角色的人(教练或培训师)可以进行初始操作,但后续操作只允许教练进行 但是,由于它们不直接访问第二个操作(仅通过中间操作),因此Auth组件不会阻止它触发。下面是一些代码: public function isAuthorized($user) { switch($this->action) { case "bulkAction": if ($use

所以我有一个例子,我有一个动作(基于某些条件)会在同一个控制器中切换到另一个动作

现在,具有给定角色的人(教练或培训师)可以进行初始操作,但后续操作只允许教练进行

但是,由于它们不直接访问第二个操作(仅通过中间操作),因此Auth组件不会阻止它触发。下面是一些代码:

public function isAuthorized($user) {
    switch($this->action) {
        case "bulkAction":
            if ($user['role'] == ('coach' || 'trainer') ) {
                return true;
            }
            break;
        case "bulkDelete":
            if ($user['role'] == 'coach') {
                return true;
            }
            break;
    }
    return parent::isAuthorized($user);
}

public function bulkAction() {
    switch($this->request->data['Action']) {
        case "delete":
            $this->bulkDelete();
            break;
    }
}

同样,当bulkAction将数据发送到bulkDelete操作时,Auth似乎被完全绕过,该操作将通过。我如何确保其他操作调用的操作仍然与控制器的isAuthorized回调进行检查?

首先,一个操作调用另一个操作是非常糟糕的设计,不应该这样做。所有用户都应该只调用bulkAction($type=null)操作。使用参数$type指定类型。因此,您的URL将类似于/foo/bulkAction/edit/foo/bulkAction/delete等。您的$type参数将接收值“edit”、“delete”等。在控制器中创建各种受保护的方法,这些方法包含每种类型的功能,并根据需要通过您的bulkAction调用它们。然后,在isAuthorised()方法中,通过检查用户角色和$this->request->params['passed']中可用的类型,返回true或false。如果愿意,您也可以使用命名参数,而不是使用param来执行操作,因此操作将是use bulkAction(),您的URL将是/foo/bulkAction/type:delete。在这种情况下,您可以使用$this->request->params['named']获取类型。

您是否尝试过使用setAction而不是直接调用action方法?如果你把上面的内容改写成一个问题,那也太好了。现在它只是一个陈述。编辑以添加实际问题!已经试过了,还是没有骰子。非常感谢。从actions调用actions总是感觉不对,但是当提交一个可以做一些事情的表单(例如,一个带有复选框的用户列表)时,我不知道如何实际使用多个action选项。这有帮助!实际上,有点问题。这来自表单提交,有几个按钮可以根据操作提交表单。我使用的是“数组('type'=>'submit'、'name'=>'Action'、'value'=>'delete')”,所以我不清楚如何使用$type方法。那么只需在isAuthorised()中检查$this->request->data['Action']。嘿,我不会永远是n00b的!:)