status != 'active') { return false; } $userId = get_current_user_id(); if ($request->getMethod() == 'GET') { return !!Helper::canAccessPortal($userId); } if (!$userId) { return false; } return $this->canManageCommunity($request); } public function join(Request $request) { $xProfile = Helper::getCurrentProfile(true); return $xProfile && $xProfile->status == 'active'; } public function leave(Request $request) { $xProfile = Helper::getCurrentProfile(true); return $xProfile && $xProfile->status == 'active'; } public function create(Request $request) { return $this->canManageCommunity($request, null); } public function searchProduct(Request $request) { return $this->canManageCommunity($request); } public function patchBySlug(Request $request, $slug) { return $this->canManageCommunity($request, Space::where('slug', $slug)->first()); } public function patchById(Request $request, $id) { return $this->canManageCommunity($request, Space::find($id)); } public function updateLinks(Request $request, $slug) { return $this->canManageCommunity($request, Space::where('slug', $slug)->first()); } /** * The manager listing exposes disabled and hidden rows, so it is not a plain portal read. */ public function getPrimaryMenu(Request $request, $slug) { return $this->canManageCommunity($request, Space::where('slug', $slug)->first()); } public function updatePrimaryMenu(Request $request, $slug) { return $this->canManageCommunity($request, Space::where('slug', $slug)->first()); } public function deleteBySlug(Request $request, $slug) { return $this->canManageCommunity($request, Space::where('slug', $slug)->first()); } public function deleteById(Request $request, $id) { return $this->canManageCommunity($request, Space::find($id)); } public function addMember(Request $request, $slug) { $space = Space::where('slug', $slug)->first(); $user = User::find(get_current_user_id()); return $user && $user->verifySpacePermission('can_add_member', $space); } public function removeMember(Request $request, $slug) { $space = Space::where('slug', $slug)->first(); $user = User::find(get_current_user_id()); return $user && $user->verifySpacePermission('can_remove_member', $space); } public function getSpaceGroups(Request $request) { if ($request->get('options_only')) { return !!Helper::canAccessPortal(get_current_user_id()); } return $this->canManageSpace($request, null); } public function createSpaceGroup(Request $request) { return $this->canManageSpace($request, null); } public function updateSpaceGroup(Request $request) { return $this->canManageSpace($request, null); } public function deleteSpaceGroup(Request $request) { return $this->canManageSpace($request, null); } public function updateSpaceGroupIndexes(Request $request) { return $this->canManageSpace($request, null); } public function updateSpaceIndexes(Request $request) { return $this->canManageSpace($request, null); } public function moveSpace(Request $request) { return $this->canManageCommunity($request); } public function getMetaSettings(Request $request, $spaceSlug) { return $this->canManageSpace($request, Space::where('slug', $spaceSlug)->first()); } public function addPaywall(Request $request, $spaceId) { return $this->canManageCommunity($request, BaseSpace::withoutGlobalScopes()->find((int) $spaceId)); } public function removePaywall(Request $request, $spaceId) { return $this->canManageCommunity($request, BaseSpace::withoutGlobalScopes()->find((int) $spaceId)); } protected function canManageCommunity(Request $request, $space = false) { $user = User::find(get_current_user_id()); if (!$user) { return false; } if ($user->hasCommunityAdminAccess()) { return true; } if ($space === false) { $space = Space::find((int) $request->get('space_id')); } return $space && $user->getSpaceRole($space) === 'admin'; } protected function canManageSpace(Request $request, $space = false) { $user = User::find(get_current_user_id()); if (!$user) { return false; } if ($user->hasSpaceManageAccess()) { return true; } if ($space === false) { $space = Space::find((int) $request->get('space_id')); } return $space && $user->getSpaceRole($space) === 'admin'; } }