Skip to content

Commit

Permalink
Fix styling
Browse files Browse the repository at this point in the history
  • Loading branch information
henryavila authored and github-actions[bot] committed Aug 30, 2023
1 parent 214864e commit 20b572e
Show file tree
Hide file tree
Showing 8 changed files with 308 additions and 323 deletions.
1 change: 0 additions & 1 deletion config/nova-multitenancy.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
//...
],


// Class that contain the fqdn attribute. The Tenant model must contain an HasMany `domains` relation for this model
// if null, will deactivate the Tenant finder by domain
'domain_class' => null,
Expand Down
74 changes: 37 additions & 37 deletions src/Http/Controllers/SelectTenantController.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,41 +9,41 @@

class SelectTenantController extends Controller
{
public static function store(Request $request)
{
$tenantId = $request->get('tenant');
if (empty($tenantId) || (int)$tenantId === 0) {
abort(404);
}

session([Tenant::TENANT_SELECTOR_SESSION_ID => $tenantId]);

return redirect(config('nova.path'));
}

/**
* Show the selection screen
*/
public function index(Request $request)
{
Tenant::forgetCurrent();

/** @var User $user */
$user = auth()->user();

if ($user->isSuperAdmin()) {
$build = Tenant::orderBy('name');
} else {
$build = $user->tenants()->orderBy('name');
}

$tenants = $build->pluck('name', 'id');

return view(
'nova-multitenancy::select-tenant',
[
'tenants' => $tenants,
]
);
}
public static function store(Request $request)
{
$tenantId = $request->get('tenant');
if (empty($tenantId) || (int) $tenantId === 0) {
abort(404);
}

session([Tenant::TENANT_SELECTOR_SESSION_ID => $tenantId]);

return redirect(config('nova.path'));
}

/**
* Show the selection screen
*/
public function index(Request $request)
{
Tenant::forgetCurrent();

/** @var User $user */
$user = auth()->user();

if ($user->isSuperAdmin()) {
$build = Tenant::orderBy('name');
} else {
$build = $user->tenants()->orderBy('name');
}

$tenants = $build->pluck('name', 'id');

return view(
'nova-multitenancy::select-tenant',
[
'tenants' => $tenants,
]
);
}
}
164 changes: 80 additions & 84 deletions src/Http/Middleware/SetTenantMiddleware.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,116 +9,112 @@

class SetTenantMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @return mixed
*/
public function handle($request, Closure $next)
{
$route = $request->route();
$routeName = $route ? $route->getName() : null;
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @return mixed
*/
public function handle($request, Closure $next)
{
$route = $request->route();
$routeName = $route ? $route->getName() : null;

// Don't run middleware if in any route marked to be ignored
if (in_array($routeName, config('nova-multitenancy.routes_to_ignore'))) {
return $next($request);
}
// Don't run middleware if in any route marked to be ignored
if (in_array($routeName, config('nova-multitenancy.routes_to_ignore'))) {
return $next($request);
}

$skipRoute = LaravelNovaMultitenancy::SKIP_ROUTE;
if (isset($route->defaults[$skipRoute]) && $route->defaults[$skipRoute] === true) {
return $next($request);
}
$skipRoute = LaravelNovaMultitenancy::SKIP_ROUTE;
if (isset($route->defaults[$skipRoute]) && $route->defaults[$skipRoute] === true) {
return $next($request);
}

// If tenant is already defined don't run this middleware
if (Tenant::current() !== null) {
return $next($request);
}
// If tenant is already defined don't run this middleware
if (Tenant::current() !== null) {
return $next($request);
}

// Set tenant based on Domain
$domainClass = config('nova-multitenancy.domain_class');
if (!empty($domainClass)) {
$host = $request->getHost();
$fqdn = config('nova-multitenancy.fqdn_column') ?? 'fqdn';
// Set tenant based on Domain
$domainClass = config('nova-multitenancy.domain_class');
if (! empty($domainClass)) {
$host = $request->getHost();
$fqdn = config('nova-multitenancy.fqdn_column') ?? 'fqdn';

$tenantByDomain = $domainClass::where($fqdn, $host)->first()?->tenant;
$tenantByDomain = $domainClass::where($fqdn, $host)->first()?->tenant;

if (!empty($tenantByDomain)) {
$this->selectTenant($tenantByDomain);
if (! empty($tenantByDomain)) {
$this->selectTenant($tenantByDomain);

return $next($request);
}
}
return $next($request);
}
}

// If the user came from Tenant Selection, let's get data from session and save the tenant
$tenantId = session()->get(Tenant::TENANT_SELECTOR_SESSION_ID);
// If the user came from Tenant Selection, let's get data from session and save the tenant
$tenantId = session()->get(Tenant::TENANT_SELECTOR_SESSION_ID);

if (!empty($tenantId)) {
/** @var Tenant $tenant */
$tenant = LaravelNovaMultitenancy::getTenantModel($tenantId);
if (empty($tenant)) {
abort(404);
}
if (! empty($tenantId)) {
/** @var Tenant $tenant */
$tenant = LaravelNovaMultitenancy::getTenantModel($tenantId);
if (empty($tenant)) {
abort(404);
}

$this->selectTenant($tenant);
$this->selectTenant($tenant);

return $next($request);
}
return $next($request);
}

// From this point, we have sure that: we have no tenant selected and we are not in login or select tenant routes
// (and not in any other route marked to be ignored)
// From this point, we have sure that: we have no tenant selected and we are not in login or select tenant routes
// (and not in any other route marked to be ignored)

$user = Auth::user();
$user = Auth::user();

if ($user === null) {
return $next($request);
}

if ($user === null) {
return $next($request);
}
// The Tenant must be set just to users that can't manage Tenants
$totalTenants = $user->tenants->count() ?? 0;

// The Tenant must be set just to users that can't manage Tenants
$totalTenants = $user->tenants->count() ?? 0;
if ($totalTenants === 1) {
$this->selectTenant($user->tenants->first());

return $next($request);
}

if ($totalTenants === 1) {
$this->selectTenant($user->tenants->first());
if ($totalTenants > 1) {

return $next($request);
}
$defaultTenant = $user->tenants
->filter(fn ($tenant) => $tenant->pivot->primary === true)
->first();

if ($defaultTenant !== null) {
$this->selectTenant($defaultTenant);

if ($totalTenants > 1) {
return $next($request);
}

$defaultTenant = $user->tenants
->filter(fn($tenant) => $tenant->pivot->primary === true)
->first();
return redirect()->route('select-tenant');
}

if ($defaultTenant !== null) {
$this->selectTenant($defaultTenant);
Auth::logout();
abort(403, trans('Você precisa estar vinculado a alguma conta.'));
}

return $next($request);
}
private function selectTenant(Tenant $tenant): void
{
$tenant->makeCurrent();

try {
$invokable = config('nova-multitenancy.invoke_after_tenant_selection');

return redirect()->route('select-tenant');
}
if (class_exists($invokable)) {
(new $invokable)();
}

Auth::logout();
abort(403, trans('Você precisa estar vinculado a alguma conta.'));
}
} catch (\Exception) {
}

private function selectTenant(Tenant $tenant): void
{
$tenant->makeCurrent();

try {
$invokable = config('nova-multitenancy.invoke_after_tenant_selection');

if (class_exists($invokable)) {
(new $invokable)();
}

} catch (\Exception) {
}

}
}
}
Loading

0 comments on commit 20b572e

Please sign in to comment.