我想知道是否有人根据用户的当前计划(使用Cashier)对功能施加限制。例如,我们假设我们有一个类似netflix的应用,它有3个月度计划:
使用subscribed()将用户限制在网站的某些区域或功能似乎微不足道。例如,如果只允许月度2或月度无限制计划的用户观看高清,我们可以做类似的事情(可能不是最好的方式,只是一个例子):
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");
}
}
现在这看起来非常混乱而且很难测试,所以我认为必须有更好的方法,并且希望听到一些建议。
谢谢!