PluginProbe
FluentCommunity – Ultra-Fast High-Performance Social Network, Community, LMS & Online Courses / 2.11.0
FluentCommunity – Ultra-Fast High-Performance Social Network, Community, LMS & Online Courses v2.11.0
2.11.0 2.10.0 2.10.01 2.9.1 2.9.0 2.8.1 2.8.0 2.7.7 2.7.5 2.7.0 2.6.01 2.6.0 2.5.0 2.4.01 trunk 1.0.90 1.0.91 1.0.92 1.0.93 1.0.94 1.0.95 1.0.96 1.0.97 1.0.98 1.0.99 All 78 releases
fluent-community / app / Http / Policies / SpacePolicy.php

SpacePolicy.php in FluentCommunity – Ultra-Fast High-Performance Social Network, Community, LMS & Online Courses 2.11.0, at app/Http/Policies/SpacePolicy.php

211 lines 5.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace FluentCommunity\App\Http\Policies;
4
5 use FluentCommunity\App\Models\User;
6 use FluentCommunity\App\Models\Space;
7 use FluentCommunity\App\Models\BaseSpace;
8 use FluentCommunity\App\Services\Helper;
9 use FluentCommunity\Framework\Http\Request\Request;
10
11 class SpacePolicy extends BasePolicy
12 {
13 /**
14 * Check user permission for any method
15 * @param \FluentCommunity\Framework\Http\Request\Request $request
16 * @return Boolean
17 */
18 public function verifyRequest(Request $request)
19 {
20 $xProfile = Helper::getCurrentProfile(true);
21 if ($xProfile && $xProfile->status != 'active') {
22 return false;
23 }
24
25 $userId = get_current_user_id();
26
27 if ($request->getMethod() == 'GET') {
28 return !!Helper::canAccessPortal($userId);
29 }
30
31 if (!$userId) {
32 return false;
33 }
34
35 return $this->canManageCommunity($request);
36 }
37
38 public function join(Request $request)
39 {
40 $xProfile = Helper::getCurrentProfile(true);
41
42 return $xProfile && $xProfile->status == 'active';
43 }
44
45 public function leave(Request $request)
46 {
47 $xProfile = Helper::getCurrentProfile(true);
48
49 return $xProfile && $xProfile->status == 'active';
50 }
51
52 public function create(Request $request)
53 {
54 return $this->canManageCommunity($request, null);
55 }
56
57 public function searchProduct(Request $request)
58 {
59 return $this->canManageCommunity($request);
60 }
61
62 public function patchBySlug(Request $request, $slug)
63 {
64 return $this->canManageCommunity($request, Space::where('slug', $slug)->first());
65 }
66
67 public function patchById(Request $request, $id)
68 {
69 return $this->canManageCommunity($request, Space::find($id));
70 }
71
72 public function updateLinks(Request $request, $slug)
73 {
74 return $this->canManageCommunity($request, Space::where('slug', $slug)->first());
75 }
76
77 /**
78 * The manager listing exposes disabled and hidden rows, so it is not a plain portal read.
79 */
80 public function getPrimaryMenu(Request $request, $slug)
81 {
82 return $this->canManageCommunity($request, Space::where('slug', $slug)->first());
83 }
84
85 public function updatePrimaryMenu(Request $request, $slug)
86 {
87 return $this->canManageCommunity($request, Space::where('slug', $slug)->first());
88 }
89
90 public function deleteBySlug(Request $request, $slug)
91 {
92 return $this->canManageCommunity($request, Space::where('slug', $slug)->first());
93 }
94
95 public function deleteById(Request $request, $id)
96 {
97 return $this->canManageCommunity($request, Space::find($id));
98 }
99
100 public function addMember(Request $request, $slug)
101 {
102 $space = Space::where('slug', $slug)->first();
103
104 $user = User::find(get_current_user_id());
105
106 return $user && $user->verifySpacePermission('can_add_member', $space);
107 }
108
109 public function removeMember(Request $request, $slug)
110 {
111 $space = Space::where('slug', $slug)->first();
112
113 $user = User::find(get_current_user_id());
114
115 return $user && $user->verifySpacePermission('can_remove_member', $space);
116 }
117
118 public function getSpaceGroups(Request $request)
119 {
120 if ($request->get('options_only')) {
121 return !!Helper::canAccessPortal(get_current_user_id());
122 }
123
124 return $this->canManageSpace($request, null);
125 }
126
127 public function createSpaceGroup(Request $request)
128 {
129 return $this->canManageSpace($request, null);
130 }
131
132 public function updateSpaceGroup(Request $request)
133 {
134 return $this->canManageSpace($request, null);
135 }
136
137 public function deleteSpaceGroup(Request $request)
138 {
139 return $this->canManageSpace($request, null);
140 }
141
142 public function updateSpaceGroupIndexes(Request $request)
143 {
144 return $this->canManageSpace($request, null);
145 }
146
147 public function updateSpaceIndexes(Request $request)
148 {
149 return $this->canManageSpace($request, null);
150 }
151
152 public function moveSpace(Request $request)
153 {
154 return $this->canManageCommunity($request);
155 }
156
157 public function getMetaSettings(Request $request, $spaceSlug)
158 {
159 return $this->canManageSpace($request, Space::where('slug', $spaceSlug)->first());
160 }
161
162 public function addPaywall(Request $request, $spaceId)
163 {
164 return $this->canManageCommunity($request, BaseSpace::withoutGlobalScopes()->find((int) $spaceId));
165 }
166
167 public function removePaywall(Request $request, $spaceId)
168 {
169 return $this->canManageCommunity($request, BaseSpace::withoutGlobalScopes()->find((int) $spaceId));
170 }
171
172 protected function canManageCommunity(Request $request, $space = false)
173 {
174 $user = User::find(get_current_user_id());
175
176 if (!$user) {
177 return false;
178 }
179
180 if ($user->hasCommunityAdminAccess()) {
181 return true;
182 }
183
184 if ($space === false) {
185 $space = Space::find((int) $request->get('space_id'));
186 }
187
188 return $space && $user->getSpaceRole($space) === 'admin';
189 }
190
191 protected function canManageSpace(Request $request, $space = false)
192 {
193 $user = User::find(get_current_user_id());
194
195 if (!$user) {
196 return false;
197 }
198
199 if ($user->hasSpaceManageAccess()) {
200 return true;
201 }
202
203 if ($space === false) {
204 $space = Space::find((int) $request->get('space_id'));
205 }
206
207 return $space && $user->getSpaceRole($space) === 'admin';
208 }
209 }
210
211