PluginProbe
FluentCommunity – Ultra-Fast High-Performance Social Network, Community, LMS & Online Courses / 2.8.1
FluentCommunity – Ultra-Fast High-Performance Social Network, Community, LMS & Online Courses v2.8.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.8.1, at app/Http/Policies/SpacePolicy.php

194 lines 4.9 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 return !!get_current_user_id();
41 }
42
43 public function leave(Request $request)
44 {
45 return !!get_current_user_id();
46 }
47
48 public function create(Request $request)
49 {
50 return $this->canManageCommunity($request, null);
51 }
52
53 public function searchProduct(Request $request)
54 {
55 return $this->canManageCommunity($request);
56 }
57
58 public function patchBySlug(Request $request, $slug)
59 {
60 return $this->canManageCommunity($request, Space::where('slug', $slug)->first());
61 }
62
63 public function patchById(Request $request, $id)
64 {
65 return $this->canManageCommunity($request, Space::find($id));
66 }
67
68 public function updateLinks(Request $request, $slug)
69 {
70 return $this->canManageCommunity($request, Space::where('slug', $slug)->first());
71 }
72
73 public function deleteBySlug(Request $request, $slug)
74 {
75 return $this->canManageCommunity($request, Space::where('slug', $slug)->first());
76 }
77
78 public function deleteById(Request $request, $id)
79 {
80 return $this->canManageCommunity($request, Space::find($id));
81 }
82
83 public function addMember(Request $request, $slug)
84 {
85 $space = Space::where('slug', $slug)->first();
86
87 $user = User::find(get_current_user_id());
88
89 return $user && $user->verifySpacePermission('can_add_member', $space);
90 }
91
92 public function removeMember(Request $request, $slug)
93 {
94 $space = Space::where('slug', $slug)->first();
95
96 $user = User::find(get_current_user_id());
97
98 return $user && $user->verifySpacePermission('can_remove_member', $space);
99 }
100
101 public function getSpaceGroups(Request $request)
102 {
103 if ($request->get('options_only')) {
104 return !!Helper::canAccessPortal(get_current_user_id());
105 }
106
107 return $this->canManageSpace($request, null);
108 }
109
110 public function createSpaceGroup(Request $request)
111 {
112 return $this->canManageSpace($request, null);
113 }
114
115 public function updateSpaceGroup(Request $request)
116 {
117 return $this->canManageSpace($request, null);
118 }
119
120 public function deleteSpaceGroup(Request $request)
121 {
122 return $this->canManageSpace($request, null);
123 }
124
125 public function updateSpaceGroupIndexes(Request $request)
126 {
127 return $this->canManageSpace($request, null);
128 }
129
130 public function updateSpaceIndexes(Request $request)
131 {
132 return $this->canManageSpace($request, null);
133 }
134
135 public function moveSpace(Request $request)
136 {
137 return $this->canManageCommunity($request);
138 }
139
140 public function getMetaSettings(Request $request, $spaceSlug)
141 {
142 return $this->canManageSpace($request, Space::where('slug', $spaceSlug)->first());
143 }
144
145 public function addPaywall(Request $request, $spaceId)
146 {
147 return $this->canManageCommunity($request, BaseSpace::withoutGlobalScopes()->find((int) $spaceId));
148 }
149
150 public function removePaywall(Request $request, $spaceId)
151 {
152 return $this->canManageCommunity($request, BaseSpace::withoutGlobalScopes()->find((int) $spaceId));
153 }
154
155 protected function canManageCommunity(Request $request, $space = false)
156 {
157 $user = User::find(get_current_user_id());
158
159 if (!$user) {
160 return false;
161 }
162
163 if ($user->hasCommunityAdminAccess()) {
164 return true;
165 }
166
167 if ($space === false) {
168 $space = Space::find((int) $request->get('space_id'));
169 }
170
171 return $space && $user->getSpaceRole($space) === 'admin';
172 }
173
174 protected function canManageSpace(Request $request, $space = false)
175 {
176 $user = User::find(get_current_user_id());
177
178 if (!$user) {
179 return false;
180 }
181
182 if ($user->hasSpaceManageAccess()) {
183 return true;
184 }
185
186 if ($space === false) {
187 $space = Space::find((int) $request->get('space_id'));
188 }
189
190 return $space && $user->getSpaceRole($space) === 'admin';
191 }
192 }
193
194