Временное ограничение для пользователей на выполнение некоторорых действий Yii?

Кто может подсказать, как осуществить ограничение пользователей на выполнение некоторых экшинов (например раз в 30 минут), но это при условии что модель была успешна сохранена?
  • Вопрос задан
  • 2712 просмотров
Решения вопроса 1
0neS
@0neS
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 на название своего экшена.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
при успешном сохранении добавляйте запис в какой журнал (в отдельной таблице) для пользователя. Далее можно написать фильтр, который будет пропускать пользователя к экшену только если прошло это самое определенное время.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы