protected function _limit($id, $resource, $duration, $times)
{
/**
* @var \ManaPHP\Security\RateLimiter\Adapter\Db\Model $model
* @var \ManaPHP\Security\RateLimiter\Adapter\Db\Model $rateLimiter
*/
$model = new $this->_model();
$rateLimiter = $model::findFirst(['hash' => md5($id . $resource)]);
if (!$rateLimiter) {
$rateLimiter = new $this->_model();
$rateLimiter->hash = md5($id . $resource);
$rateLimiter->id = $id;
$rateLimiter->resource = $resource;
$rateLimiter->expired_time = time() + $duration;
$rateLimiter->times = 1;
} else {
if (time() > $rateLimiter->expired_time) {
$rateLimiter->expired_time = time() + $duration;
$rateLimiter->times = 1;
} else {
$rateLimiter->times++;
}
}
$rateLimiter->save();
return $rateLimiter->times <= $times;
}