PluginProbe
FluentCommunity – Ultra-Fast High-Performance Social Network, Community, LMS & Online Courses / 2.9.1
FluentCommunity – Ultra-Fast High-Performance Social Network, Community, LMS & Online Courses v2.9.1
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 1.1.0 All 77 releases
fluent-community / app / Http / Policies / SpacePolicy.php

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

198 lines 5.1 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 public function deleteBySlug(Request $request, $slug)
78 {
79 return $this->canManageCommunity($request, Space::where('slug', $slug)->first());
80 }
81
82 public function deleteById(Request $request, $id)
83 {
84 return $this->canManageCommunity($request, Space::find($id));
85 }
86
87 public function addMember(Request $request, $slug)
88 {
89 $space = Space::where('slug', $slug)->first();
90
91 $user = User::find(get_current_user_id());
92
93 return $user && $user->verifySpacePermission('can_add_member', $space);
94 }
95
96 public function removeMember(Request $request, $slug)
97 {
98 $space = Space::where('slug', $slug)->first();
99
100 $user = User::find(get_current_user_id());
101
102 return $user && $user->verifySpacePermission('can_remove_member', $space);
103 }
104
105 public function getSpaceGroups(Request $request)
106 {
107 if ($request->get('options_only')) {
108 return !!Helper::canAccessPortal(get_current_user_id());
109 }
110
111 return $this->canManageSpace($request, null);
112 }
113
114 public function createSpaceGroup(Request $request)
115 {
116 return $this->canManageSpace($request, null);
117 }
118
119 public function updateSpaceGroup(Request $request)
120 {
121 return $this->canManageSpace($request, null);
122 }
123
124 public function deleteSpaceGroup(Request $request)
125 {
126 return $this->canManageSpace($request, null);
127 }
128
129 public function updateSpaceGroupIndexes(Request $request)
130 {
131 return $this->canManageSpace($request, null);
132 }
133
134 public function updateSpaceIndexes(Request $request)
135 {
136 return $this->canManageSpace($request, null);
137 }
138
139 public function moveSpace(Request $request)
140 {
141 return $this->canManageCommunity($request);
142 }
143
144 public function getMetaSettings(Request $request, $spaceSlug)
145 {
146 return $this->canManageSpace($request, Space::where('slug', $spaceSlug)->first());
147 }
148
149 public function addPaywall(Request $request, $spaceId)
150 {
151 return $this->canManageCommunity($request, BaseSpace::withoutGlobalScopes()->find((int) $spaceId));
152 }
153
154 public function removePaywall(Request $request, $spaceId)
155 {
156 return $this->canManageCommunity($request, BaseSpace::withoutGlobalScopes()->find((int) $spaceId));
157 }
158
159 protected function canManageCommunity(Request $request, $space = false)
160 {
161 $user = User::find(get_current_user_id());
162
163 if (!$user) {
164 return false;
165 }
166
167 if ($user->hasCommunityAdminAccess()) {
168 return true;
169 }
170
171 if ($space === false) {
172 $space = Space::find((int) $request->get('space_id'));
173 }
174
175 return $space && $user->getSpaceRole($space) === 'admin';
176 }
177
178 protected function canManageSpace(Request $request, $space = false)
179 {
180 $user = User::find(get_current_user_id());
181
182 if (!$user) {
183 return false;
184 }
185
186 if ($user->hasSpaceManageAccess()) {
187 return true;
188 }
189
190 if ($space === false) {
191 $space = Space::find((int) $request->get('space_id'));
192 }
193
194 return $space && $user->getSpaceRole($space) === 'admin';
195 }
196 }
197
198