PluginProbe
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder / 6.2.7
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder v6.2.7
6.2.14 6.2.13 6.2.12 6.2.10 6.2.11 6.2.9 6.2.8 6.2.7 6.2.6 6.2.5 6.2.4 6.2.3 6.2.2 3.6.22 3.6.31 3.6.40 3.6.41 3.6.42 3.6.50 3.6.51 3.6.60 3.6.61 3.6.62 3.6.64 3.6.65 All 196 releases
fluentform / app / Http / Policies / SubmissionPolicy.php

SubmissionPolicy.php in Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder 6.2.7, at app/Http/Policies/SubmissionPolicy.php

95 lines 2.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace FluentForm\App\Http\Policies;
4
5 use FluentForm\App\Models\Submission;
6 use FluentForm\App\Modules\Acl\Acl;
7 use FluentForm\Framework\Http\Request\Request;
8 use FluentForm\Framework\Foundation\Policy;
9 use FluentForm\Framework\Support\Arr;
10
11 class SubmissionPolicy extends Policy
12 {
13 /**
14 * Check permission for any method
15 *
16 * @param \FluentForm\Framework\Request\Request $request
17 * @return bool
18 */
19 public function verifyRequest(Request $request)
20 {
21 $formId = $this->resolveFormId($request);
22 return Acl::hasPermission('fluentform_entries_viewer', $formId);
23 }
24
25 public function handleBulkActions(Request $request)
26 {
27 $formId = $this->resolveFormId($request);
28 return Acl::hasPermission('fluentform_manage_entries', $formId);
29 }
30
31 public function store(Request $request)
32 {
33 return $this->handleBulkActions($request);
34 }
35
36 public function updateStatus(Request $request)
37 {
38 return $this->handleBulkActions($request);
39 }
40
41 public function toggleIsFavorite(Request $request)
42 {
43 return $this->handleBulkActions($request);
44 }
45
46 public function remove(Request $request)
47 {
48 return $this->handleBulkActions($request);
49 }
50
51 public function print(Request $request)
52 {
53 return $this->handleBulkActions($request);
54 }
55
56 public function updateSubmissionUser(Request $request)
57 {
58 // Controller now uses entry_id from route as the mutation target,
59 // so authorization and mutation are always the same record.
60 $formId = $this->resolveFormId($request);
61 return Acl::hasPermission('fluentform_manage_entries', $formId);
62 }
63
64 /**
65 * Resolve the form_id for authorization.
66 *
67 * entry_id is read from the URL route parameter first so that a JSON body
68 * {"entry_id": X} cannot shadow the URL placeholder and cause the policy to
69 * authorize against a different record than the controller acts on (IDOR).
70 */
71 private function resolveFormId(Request $request)
72 {
73 $route = $request->route();
74 $entryId = $route ? Arr::get($route->getParameter(), 'entry_id') : null;
75
76 if (!$entryId) {
77 $entryId = $request->get('entry_id');
78 }
79
80 if ($entryId) {
81 $submission = Submission::select('form_id')->find(intval($entryId));
82 if ($submission) {
83 return $submission->form_id;
84 }
85 }
86
87 $formId = $route ? Arr::get($route->getParameter(), 'form_id') : null;
88 if (!$formId) {
89 $formId = $request->get('form_id');
90 }
91
92 return $formId ? intval($formId) : null;
93 }
94 }
95