コード例 #1
0
 /**
  * Handle an incoming request.
  *
  * @param \Illuminate\Http\Request $request
  * @param \Closure                 $next
  *
  * @return mixed
  */
 public function handle($request, Closure $next)
 {
     $owner = $creator = null;
     /** @var TenantContract $tenant */
     $tenant = app('auth.tenant');
     /** @var TenantParticipantContract $owner */
     if (null !== ($tenantOwnerId = $request->route('tenant_owner_id'))) {
         if ($tenant->getTenantOwnerId() && $tenantOwnerId != $tenant->getTenantOwnerId()) {
             abort(500, sprintf('Selected tenant_owner_id "%s" in route parameters does not match the resolved owner "%s: %s"', $tenantOwnerId, $tenant->getTenantOwnerId(), $tenant->getTenantOwner()->getName()));
         }
         $owner = $this->repository->find($tenantOwnerId);
     }
     /** @var TenantParticipantContract $creator */
     if (null !== ($tenantCreatorId = $request->route('tenant_creator_id'))) {
         $creator = $this->repository->find($tenantCreatorId);
     }
     /** @var BelongsToTenantContract $user */
     $user = $this->auth->user();
     if (!$user instanceof BelongsToTenantContract) {
         abort(500, sprintf('The Authenticatable User entity does not implement BelongsToTenant contract.'));
     }
     if (!$creator || !$user->belongsToTenant($creator)) {
         return redirect()->route('tenant.access_denied');
     }
     if ($owner && $creator->getTenantOwner() !== $owner) {
         return redirect()->route('tenant.invalid_tenant_hierarchy');
     }
     // remove the tenant parameters, TenantAware URL generator has access to Tenant
     $request->route()->forgetParameter('tenant_owner_id');
     $request->route()->forgetParameter('tenant_creator_id');
     // bind resolved tenant data to container
     $tenant->updateTenancy($user, $creator->getTenantOwner(), $creator);
     return $next($request);
 }
 /**
  * Returns the class name of the object managed by the repository.
  *
  * @return string
  */
 public function getClassName()
 {
     return $this->repository->getClassName();
 }