我想知道是否有人有根据用户当前计划(使用 Cashier)对功能施加限制的经验。例如,假设我们有一个类似 netflix 的应用程序,它有 3 个月度计划:
- 每月-1
- 每月-2
- 每月无限制
使用 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");
}
}
现在这看起来真的很乱而且很难测试所以我认为必须有更好的方法并且很想听听一些建议。
谢谢!