add new middleware for module limitation
This commit is contained in:
parent
aa393c58fc
commit
421cc1091a
|
|
@ -84,6 +84,7 @@ class Kernel extends HttpKernel
|
|||
'menu.admin',
|
||||
'permission:read-admin-panel',
|
||||
'plan.limits',
|
||||
'module.subscription',
|
||||
],
|
||||
|
||||
'wizard' => [
|
||||
|
|
@ -175,6 +176,7 @@ class Kernel extends HttpKernel
|
|||
'dropzone' => \App\Http\Middleware\Dropzone::class,
|
||||
'header.x' => \App\Http\Middleware\AddXHeader::class,
|
||||
'plan.limits' => \App\Http\Middleware\RedirectIfHitPlanLimits::class,
|
||||
'module.subscription' => \App\Http\Middleware\RedirectIfHitModuleSubscription::class,
|
||||
'menu.admin' => \App\Http\Middleware\AdminMenu::class,
|
||||
'menu.portal' => \App\Http\Middleware\PortalMenu::class,
|
||||
'date.format' => \App\Http\Middleware\DateFormat::class,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use App\Traits\Modules;
|
||||
use App\Utilities\Versions;
|
||||
use Closure;
|
||||
|
||||
class RedirectIfHitModuleSubscription
|
||||
{
|
||||
use Modules;
|
||||
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle($request, Closure $next)
|
||||
{
|
||||
if (! $request->isMethod(strtolower('GET'))) {
|
||||
return $next($request);
|
||||
}
|
||||
|
||||
if ($request->ajax()) {
|
||||
return $next($request);
|
||||
}
|
||||
|
||||
if ($request->is(company_id() . '/apps/*')) {
|
||||
return $next($request);
|
||||
}
|
||||
|
||||
if (! $this->getModulesLimitOfSubscription()->action_status) {
|
||||
return redirect()->route('dashboard');
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
|
|
@ -2,10 +2,13 @@
|
|||
|
||||
namespace App\Traits;
|
||||
|
||||
use App\Jobs\Install\DisableModule;
|
||||
use App\Jobs\Install\UninstallModule;
|
||||
use App\Models\Module\Module;
|
||||
use App\Traits\SiteApi;
|
||||
use App\Utilities\Date;
|
||||
use App\Utilities\Info;
|
||||
use App\Utilities\Versions;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
|
||||
trait Modules
|
||||
|
|
@ -423,6 +426,86 @@ trait Modules
|
|||
return ! $this->moduleIsEnabled($alias);
|
||||
}
|
||||
|
||||
public function getModulesLimitOfSubscription()
|
||||
{
|
||||
$limit = new \stdClass();
|
||||
|
||||
$limit->action_status = true;
|
||||
$limit->view_status = true;
|
||||
$limit->message = "Success";
|
||||
|
||||
if (! config('app.installed') || running_in_test()) {
|
||||
return $limit;
|
||||
}
|
||||
|
||||
if (is_cloud()) {
|
||||
return $limit;
|
||||
}
|
||||
|
||||
$modules = module()->all();
|
||||
|
||||
$versions = Versions::all($modules);
|
||||
|
||||
foreach ($versions as $alias => $version) {
|
||||
if ($alias == 'core') {
|
||||
continue;
|
||||
}
|
||||
|
||||
$module_limit = $this->getModuleLimitOfSubscription($alias, $version);
|
||||
|
||||
if ($module_limit->action_status === false) {
|
||||
$limit->action_status = false;
|
||||
$limit->view_status = false;
|
||||
$limit->message = $module_limit->message;
|
||||
}
|
||||
}
|
||||
|
||||
return $limit;
|
||||
}
|
||||
|
||||
public function getModuleLimitOfSubscription($alias, $version = null)
|
||||
{
|
||||
$limit = new \stdClass();
|
||||
|
||||
$limit->action_status = true;
|
||||
$limit->view_status = true;
|
||||
$limit->message = "Success";
|
||||
|
||||
if (empty($version)) {
|
||||
$version = Versions::getVersionByAlias($alias);
|
||||
}
|
||||
|
||||
if (! $version->subscription) {
|
||||
return $limit;
|
||||
}
|
||||
|
||||
if (! in_array($version->subscription->action_status, ['disabled', 'uninstalled'])) {
|
||||
return $limit;
|
||||
}
|
||||
|
||||
$limit->action_status = false;
|
||||
$limit->view_status = false;
|
||||
$limit->message = "Not able to app $alias.";
|
||||
|
||||
$module_companies = Module::allCompanies()->alias($alias)->get();
|
||||
|
||||
foreach ($module_companies as $module) {
|
||||
switch ($version->subscription->action_status) {
|
||||
case 'disabled':
|
||||
dispatch(new DisableModule($alias, $module->company_id));
|
||||
break;
|
||||
case 'uninstalled':
|
||||
dispatch(new UninstallModule($alias, $module->company_id));
|
||||
break;
|
||||
default:
|
||||
// Do nothing
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $limit;
|
||||
}
|
||||
|
||||
public function loadSubscriptions()
|
||||
{
|
||||
$key = 'apps.subscriptions';
|
||||
|
|
|
|||
|
|
@ -140,8 +140,6 @@ class Versions
|
|||
$url = 'apps/' . $alias . '/version/' . $version . '/' . $info['akaunting'];
|
||||
|
||||
$versions[$alias] = static::getLatestVersion($url, $version);
|
||||
|
||||
static::enforceSubscriptionStatus($alias, $versions[$alias]);
|
||||
}
|
||||
|
||||
return $versions;
|
||||
|
|
@ -167,10 +165,6 @@ class Versions
|
|||
|
||||
$versions[$alias] = static::getLatestVersion($url, $version);
|
||||
|
||||
if ($alias != 'core') {
|
||||
static::enforceSubscriptionStatus($alias, $versions[$alias]);
|
||||
}
|
||||
|
||||
Cache::put('versions', $versions, Date::now()->addHours(6));
|
||||
|
||||
return $versions[$alias];
|
||||
|
|
@ -240,10 +234,10 @@ class Versions
|
|||
foreach ($module_companies as $module) {
|
||||
switch ($status) {
|
||||
case 'disabled':
|
||||
dispatch_sync(new DisableModule($alias, $module->company_id));
|
||||
dispatch(new DisableModule($alias, $module->company_id));
|
||||
break;
|
||||
case 'uninstalled':
|
||||
dispatch_sync(new UninstallModule($alias, $module->company_id));
|
||||
dispatch(new UninstallModule($alias, $module->company_id));
|
||||
break;
|
||||
default:
|
||||
// Do nothing
|
||||
|
|
|
|||
Loading…
Reference in New Issue