You should separate routes/controllers (application logic) and cancelling subscription (business login).
Specifically, create new class App\Actions\CancelSubscriptionAction with one method:
public function execute (Subscription $subscription)
{
$subscription->status = 'cancelled';
$subscription->save
}
Then, in routes/web.php you should have something like:
Route::post('/subscription/{subscription}/cancel', [ SubscriptionController::class, 'cancel' ]);
Route::post('/admin/subscription/{subscription}/cancel', [ AdminSubscriptionController::class, 'cancel' ]);
And separate controllers for users and admins which are responsible for calling your action and returning result to user the way you need (note they return different routes, but call the same action):
class SubscriptionController extends Controller
{
public function cancel(Subscription $subscription)
{
(new CancelSubscriptionAction($subscription))->execute();
return redirect()->route('users.customers.subscriptions')->with('success', 'Subscription cancelled successfully.');
}
}
class AdminSubscriptionController extends Controller
{
public function cancel(Subscription $subscription)
{
(new CancelSubscriptionAction($subscription))->execute();
return redirect()->route('admin.customers.subscriptions')->with('success', 'Subscription cancelled successfully.');
}
}
Note that integer subscription id is not used anywhere, only typed class Subscription! Laravel handles it itself in very convenient way.