Установление лимитов на основе планов Laravel Cashier
Мне было интересно, есть ли у кого-нибудь опыт наложения ограничений на функции, основанные на текущем плане пользователя (используя Кассу). Например, скажем, у нас есть приложение, похожее на netflix, которое имеет 3 ежемесячных плана:
- ежемесячно-1
- в месяц-2
- ежемесячно неограниченное
Ограничение пользователей определенными областями сайта или функциями кажется достаточно тривиальным с использованием subscription (). Например, если только пользователи с ежемесячным неограниченным или ежемесячным неограниченным тарифом могут смотреть в HD, мы могли бы сделать что-то вроде этого (вероятно, не лучшим способом, а просто примером):
public function getHdLink(Video $video)
{
if (Auth::user()->subscribed('monthly-1')) {
throw new AccessDeniedException("You should upgrade your plan to watch in HD");
}
return "...";
}
Но что, если мы хотим ограничить количество видео, которые людям разрешено смотреть в зависимости от их плана? То, что я делаю сейчас, примерно так:
// in a controller
public function watch(Video $video)
{
$view_counts = Auth::user()->activities()->count();
if (Auth::user()->subscribed('monthly-1') && $view_counts >= 25) {
throw new Exception("You watched too many movies");
}
}
Теперь это кажется очень грязным, и это трудно проверить, поэтому я думаю, что должен быть лучший способ и хотел бы услышать некоторые предложения.
Спасибо!