File: /home/xedaptot/ai.naniguide.com/app/Policies/SubscriptionPolicy.php
<?php
namespace App\Policies;
use Illuminate\Auth\Access\HandlesAuthorization;
use App\Model\User;
use App\Model\Setting;
use App\Cashier\Cashier;
use App\Model\Subscription;
class SubscriptionPolicy
{
use HandlesAuthorization;
public function approve(User $user, Subscription $subscription, $role)
{
switch ($role) {
case 'admin':
$can = $subscription->getUnpaidOrder() &&
$subscription->getUnpaidOrder()->getItsOnlyInvoice()->getPendingPaymentIntent();
break;
case 'customer':
$can = false;
break;
}
return $can;
}
public function readAll(User $user, Subscription $subscription, $role)
{
switch ($role) {
case 'admin':
$can = $user->admin->getPermission('subscription_read') == 'all';
break;
case 'customer':
$can = false;
break;
}
return $can;
}
public function read(User $user, Subscription $subscription, $role)
{
switch ($role) {
case 'admin':
$can = $user->admin->getPermission('subscription_read') != 'no';
break;
case 'customer':
$can = !$subscription->id || $user->customer->id == $subscription->customer_id;
break;
}
return $can;
}
public function disableRecurring(User $user, Subscription $subscription, $role)
{
$can = $subscription->isActive() && $subscription->isRecurring();
switch ($role) {
case 'admin':
break;
case 'customer':
break;
}
return $can;
}
public function enableRecurring(User $user, Subscription $subscription, $role)
{
$can = $subscription->isActive() && !$subscription->isRecurring() && !$subscription->isEnded();
switch ($role) {
case 'admin':
break;
case 'customer':
break;
}
return $can;
}
public function cancelNow(User $user, Subscription $subscription, $role)
{
$can = $subscription->isActive();
switch ($role) {
case 'admin':
break;
case 'customer':
break;
}
return $can;
}
public function terminate(User $user, Subscription $subscription, $role)
{
$can = $subscription->isActive() || $subscription->isNew();
switch ($role) {
case 'admin':
break;
case 'customer':
break;
}
return $can;
}
public function invoices(User $user, Subscription $subscription, $role)
{
$can = isset($subscription);
switch ($role) {
case 'admin':
break;
case 'customer':
break;
}
return $can;
}
public function changePlan(User $user, Subscription $subscription, $role)
{
switch ($role) {
case 'admin':
$can = false;
break;
case 'customer':
// A lingering unpaid change-plan order from an earlier abandoned
// attempt is handled at the controller/service layer (the old order
// gets replaced on POST), so it must NOT block access here.
$can = $subscription->isActive();
break;
}
return $can;
}
public function rejectPending(User $user, Subscription $subscription, $role)
{
switch ($role) {
case 'admin':
$can = $subscription->getUnpaidOrder() &&
$subscription->getUnpaidOrder()->getItsOnlyInvoice()->getPendingPaymentIntent();
break;
case 'customer':
$can = false;
break;
}
return $can;
}
public function delete(User $user, Subscription $subscription, $role)
{
$can = $subscription->isEnded() || $subscription->isTerminated();
switch ($role) {
case 'admin':
break;
case 'customer':
$can = false;
break;
}
return $can;
}
public function replenishSendingCredits(User $user, Subscription $subscription, $role)
{
$can = $subscription->isActive();
switch ($role) {
case 'admin':
break;
case 'customer':
$can = false;
break;
}
return $can;
}
public function replenishVerificationCredits(User $user, Subscription $subscription, $role)
{
$can = $subscription->isActive();
switch ($role) {
case 'admin':
break;
case 'customer':
$can = false;
break;
}
return $can;
}
}