gpt4 book ai didi

php - 根据特定客户端 ID 过滤对 Controller 操作的访问的最佳方法

转载 作者:可可西里 更新时间:2023-10-31 23:32:50 26 4
gpt4 key购买 nike

我正在使用 CakePHP 2.2 构建一个应用程序,其中每个客户端都有自己的数据“领域”,并且其他数据对它们都是不可见的。例如,客户有他的一组用户、类(class)、承包商和工作。组在客户端之间共享,但它们不能对组执行操作。所有客户端可以对组做的就是将它们分配给用户。因此,管理员(使用 ACL)只能管理来自相同客户端 ID 的数据。

我的所有对象(当然,组除外)都有 client_id 键。

现在,我知道了一种方法来完成这项工作并且实际运行良好,但它看起来有点脏,我想知道是否有更好的方法。作为项目的早期参与者和 CakePHP 的新手,我渴望把它做好。

我现在就是这样做的:

1- 用户登录。根据用户表中的数据将他的client_id 写入session。

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

2- 在 AppController 中,我有一个 protected 函数,可以将该 session 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- 我使用不同的索引操作(每个索引、每个相关 Controller ),我使用分页条件检查 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, $this->Auth->user('id'));
$this->Session->write('User.client_id', $user['User']['client_id']);

不需要。您无需重新读取用户,或向 session 写入任何内容 - 只需在需要时直接从 Auth 获取 client_id。

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

AuthComponent::user('client_id')

尽管您似乎不需要它。

关于php - 根据特定客户端 ID 过滤对 Controller 操作的访问的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13259937/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com