allowField设置的允许字段不受控制

浏览:377 发布日期:2018/04/16
5.0.0 - 普通 - 已关闭
版本 :define('THINK_VERSION', '5.0.15');



DealerAddress模型设置了自动写入新增时间戳字段:
```
protected $updateTime = false;//取消自动更新时间戳
protected $createTime = 'add_time';//插入数据时操作的时间戳字段
protected $autoWriteTimestamp = true;//写入时间戳
```

测试代码:

```
$user = (new DealerAddress())->find(['id'=>70]);

$re = $user->allowField(['name','id'])->save([
//前端传入数据
'name'=>'pang',
'phone'=>time(),
'add_time'=>'990',
]);

```
如上:使用allowField方法只想让其更新name字段,
但是请求中猜测出时间戳字段则数据库会跳过allowField的过滤。


相关位置:
thinkphp/library/think/Model.php #1183
```
} elseif (!empty($this->field)) {
$field = array_merge($this->field, $auto);
if ($this->autoWriteTimestamp) {
array_push($field, $this->createTime, $this->updateTime);
}
```
这里array_push导致的所有时间戳字段会跳过allowField的处理。

因为没有升级到最新版本 所以有可能是我测试不足。。
评论(
后面还有条评论,点击查看>>