1. В таблицу с пользователями добавить поле lastActionTime с типом данных timestamp
2. В модели, которую сохраняете в экшене:
protected function afterSave() {
if (parent::afterSave()) {
$user = User::model()->findByPk(Yii::app()->user->id);
$user->lastActionTime = date('Y-m-d H:i:s');
$user->save();
return true;
} else return false;
}
3. В контроллере:
public function filters() {
return array(
'LastActionTime + index'
);
}
public function filterLastActionTime($filterChain) {
$user = User::model()->findByPk(Yii::app()->user->id);
if ($user->lastActionTime > date('Y-m-d H:i:s', time() - 60 * 30)) { // 30 минут
Yii::app()->user->setFlash('error', 'Вы уже выполняли это действие меньше чем полчаса назад :(');
$this->redirect(Yii::app()->homeUrl);
}
$filterChain->run();
}
Не забудьте заменить index на название своего экшена.