根据Laravel Cashier计划实施限制

时间:2017-02-21 18:01:46

标签: laravel laravel-cashier

我想知道是否有人根据用户的当前计划(使用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");
    }
}

现在这看起来非常混乱而且很难测试,所以我认为必须有更好的方法,并且希望听到一些建议。

谢谢!

0 个答案:

没有答案