php – 根据特定客户端ID过滤对控制器操作的访问的最佳方法

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 根据特定客户端ID过滤对控制器操作的访问的最佳方法脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
使用Cake PHP 2.2,我正在构建一个应用程序,其中每个客户端都拥有自己的数据“领域”,并且其他任何数据都不可见.例如,客户有他的一组用户,课程,承包商和工作.组在客户端之间共享,但它们无法对组执行操作.所有客户端都可以使用组将其分配给用户.因此,管理员(使用ACL)只能管理来自同一客户端ID的数据.

@H_502_8@

我的所有对象(当然除了组)都有client_id键.@H_502_8@

现在,我知道一种方法可以完成这项工作,并且实际上它运行良好,但它看起来有点脏,我想知道是否有更好的方法.在项目的早期和CakePHP新手,我渴望得到正确的.@H_502_8@

这就是我现在这样做的方式:@H_502_8@

1-用户登录.他的client_id根据用户表中的数据写入会话.@H_502_8@

@H_502_8@

$user = $this->User->read(null,$this->Auth->user('id'));
$this->Session->wrITe('User.client_id',$user['User']['client_id']);

2-在AppController中,我有一个受保护的函数,它将该会话ID与给定参数进行比较.@H_502_8@

@H_502_8@

PRotected function clientCheck($client_id) {
    if ($this->Session->read('User.client_id') == $client_id) {
        return true;
    } else {
        $this->Session->setFlash(__('Invalid object or view.'));
        $this->redirect(array('controller' => 'user','action' => 'home'));
    }
}

3-我的不同索引操作(每个索引,每个相关的控制器),我使用分页条件检查client_id.@H_502_8@

@H_502_8@

public function index() {
    $this->User->recursive = 0;
    $this->paginate = array(
         'conditions' => array('User.client_id' => $this->Session->read('User.client_id'))
    );
    $this->set('users',$this->paginate());
}

4-在其他操作中,我在检查HTTP请求类型之前检查client_id.@H_502_8@

@H_502_8@

$user = $this->User->read(null,$id);
$this->clientCheck($user['User']['client_id']);
$this->set('user',$user);

解决方法

这个概念很好 – 它并不“脏”,而且与我处理这种情况的方式完全一样.

@H_502_8@

你刚刚得到了几行冗余代码.第一:@H_502_8@

@H_502_8@

$this->Auth->user('id')

方法实际上可以为登录用户获取任何字段,因此您可以执行以下操作:@H_502_8@

@H_502_8@

$this->Auth->user('client_id')

你的两行:@H_502_8@

@H_502_8@

$user = $this->User->read(null,$user['User']['client_id']);

不需要.您无需重新读取用户或向会话写入任何内容 – 只需在您需要时直接从Auth获取client_id.@H_502_8@

事实上,如果您阅读http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html#accessing-the-logged-in-user,它甚至表示您可以从控制器的上下文之外获取它,使用静态方法,如:@H_502_8@

@H_502_8@

Authcomponent::user('client_id')

虽然看起来你似乎不需要那样.@H_502_8@

脚本宝典总结

以上是脚本宝典为你收集整理的php – 根据特定客户端ID过滤对控制器操作的访问的最佳方法全部内容,希望文章能够帮你解决php – 根据特定客户端ID过滤对控制器操作的访问的最佳方法所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。