加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 16:19:10 所属栏目:PHP教程 来源:网络整理
导读:使用Cake PHP 2.2,我正在构建一个应用程序,其中每个客户端都拥有自己的数据“领域”,并且其他任何数据都不可见.例如,客户有他的一组用户,课程,承包商和工作.组在客户端之间共享,但它们无法对组执行操作.所有客户端都可以使用组将其分配给用户.因此,管理员(使
使用Cake PHP 2.2,我正在构建一个应用程序,其中每个客户端都拥有自己的数据“领域”,并且其他任何数据都不可见.例如,客户有他的一组用户,课程,承包商和工作.组在客户端之间共享,但它们无法对组执行操作.所有客户端都可以使用组将其分配给用户.因此,管理员(使用ACL)只能管理来自同一客户端ID的数据.

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

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

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

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

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

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

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.

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.

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

解决方法

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

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

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

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

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

你的两行:

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

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

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

AuthComponent::user('client_id')

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读