我在索引操作app/controllers/UsersController.php
中做了一个简单的操作。Users::find('all');
该路径/users/index
呈现用户数据的普通 HTML 输出。该路径/users/index.json
呈现 HTML 输出的 JSON 等价物,这很好,除了它还公开了密码(它是散列的,但仍然......)。
我看到了两种避免这种情况的选择:
fields
在我的查找器中明确指定。- 过滤
Media::render()
和取消设置任何敏感数据。
从长远来看,我觉得#2 可能更容易维护。有什么意见吗?是否有第三种更好的替代方案?
这就是我实现#2的方式:
<?php
namespace app\controllers;
use \lithium\net\http\Media;
class UsersController extends \lithium\action\Controller {
protected function _init() {
Media::applyFilter('render', function($self, $params, $chain) {
if ($params['options']['type'] === 'json') {
foreach ($params['data']['users'] as $user) {
$user->set([
'password' => null,
'salt' => null
]);
}
}
return $chain->next($self, $params, $chain);
});
parent::_init();
}
}
?>
任何意见,将不胜感激。