我有一个带有第三方插件的应用程序来处理ACL管理,工作正常,但是我遇到了一些isAuthorized函数的问题。用户正在传递给函数,当我调试变量时,我可以看到数据集中的所有正确信息,但是当脚本执行查询查询时,它返回空。这就是事情,我正在执行查询的模型是我正在使用的插件的一部分。所以我在我的应用程序中对我的插件中的模型执行查找。对我来说这并不理想,但我正在使用一个没有专门构建应用程序的插件。为了执行查找作者添加
App::uses('User', 'AuthAcl.Model');
所以这个发现是可能的。现在说,我在语句的条件部分调整了一件事,因为我在字段列表中得到列'id'是SQL中的模糊错误。我开始得到这个错误,因为我在应用程序中添加了一些关系。
我说了这一切 - 因为我通过App Uses加载模型不应该能够执行这样的查找
$this->User->Find('First');
我试过了,它说我正在非对象上执行。这是该脚本的代码。我需要输入。当我在没有调试的情况下执行我的脚本时,它会锁定我的应用程序,通过读取代码并调试它,我认为这是因为find返回为空。另外请注意 - 请耐心等待 - 我没有编写此代码,而且我正处于学习理解其他开发人员代码的阶段。我正在使用CAKEPHP 2.3谢谢大家!
public function isAuthorized($user = null) {
App::uses('User', 'AuthAcl.Model');
App::uses('Group', 'AuthAcl.Model');
$authFlag = false;
$this->set('login_user',$user);
$userModel = new User();
$group = new Group();
//die(debug($user));
$rs = $this->$userModel->find('first',array('conditions'=>array('user.id' => $user['id'])));
die(debug($rs));
$action = 'controllers';
if (!empty($this->plugin)){
$action .= '/'.$this->plugin;
}
$action .= '/'.$this->name;
$action .= '/'.$this->action;
if (!empty($rs['Group'])){
foreach ($rs['Group'] as $group){
$authFlag = $this->Acl->check(array('Group' => array('id' => $group['id'])), $action);
if ($authFlag == true){
break;
}
}
}
if ($authFlag == false && !empty($user)){
$authFlag = $this->Acl->check(array('User' => array('id' => $user['id'])), $action);
//die(debug($authFlag));
}
if ($authFlag == false && !empty($user)){
$this->redirect(array('controller' => 'accessDenied', 'action' => 'index','plugin' =>'auth_acl'));
}
if (!empty($user)){
$user = $userModel->find('first',array('conditions' => array('user.id' => $user['id'])));
$this->Session->write('auth_user',$user);
$this->request->data['auth_plugin'] = $this->plugin;
$this->request->data['auth_controller'] = $this->name;
$this->request->data['auth_action'] = $this->action;
}
return $authFlag;
}
}