PluginProbe
Fluent Support – Helpdesk & Customer Support Ticket System / 2.3.0
Fluent Support – Helpdesk & Customer Support Ticket System v2.3.0
2.4.5 2.4.0 2.3.2 2.3.1 2.3.0 2.2.1 2.2.0 trunk 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.10.5 1.4.0 1.4.1 1.4.2 1.4.5 1.4.6 1.4.7 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 All 69 releases
fluent-support / app / Http / Policies / AgentTicketPolicy.php

AgentTicketPolicy.php in Fluent Support – Helpdesk & Customer Support Ticket System 2.3.0, at app/Http/Policies/AgentTicketPolicy.php

255 lines 7.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace FluentSupport\App\Http\Policies;
4
5 use FluentSupport\App\Modules\PermissionManager;
6 use FluentSupport\Framework\Http\Request\Request;
7 use FluentSupport\Framework\Foundation\Policy;
8
9 class AgentTicketPolicy extends Policy
10 {
11 /**
12 * Default policy check: GET requests require view permission, POST/PUT/DELETE require manage permission.
13 *
14 * @param \FluentSupport\Framework\Request\Request $request
15 * @return Boolean
16 */
17 public function verifyRequest(Request $request)
18 {
19 if ($request->method() === 'GET') {
20 $status = PermissionManager::userCan([
21 'fst_view_tickets',
22 'fst_draft_reply',
23 'fst_manage_own_tickets',
24 'fst_manage_unassigned_tickets',
25 'fst_manage_other_tickets'
26 ]);
27 } else {
28 // Non-GET requests require manage permission by default.
29 // Routes safe for draft/view-only agents have dedicated policy methods
30 // (e.g. createResponse, createOrUpdatDraft, storeOrUpdateLabelSearch).
31 $status = PermissionManager::canManageTickets();
32 }
33
34 return apply_filters('fluent_support/agent_has_access', $status, $request);
35 }
36
37 /**
38 * Bulk actions: delete requires fst_delete_tickets, others require manage permission.
39 */
40 public function doBulkActions(Request $request)
41 {
42 $action = $request->getSafe('bulk_action', 'sanitize_text_field');
43
44 if ($action === 'delete_tickets') {
45 return PermissionManager::currentUserCan('fst_delete_tickets');
46 }
47
48 return PermissionManager::canManageTickets();
49 }
50
51 /**
52 * Delete ticket requires explicit delete permission.
53 */
54 public function deleteTicket(Request $request)
55 {
56 return PermissionManager::currentUserCan('fst_delete_tickets');
57 }
58
59 /**
60 * Creating a response: accessible to manage and draft agents.
61 * View-only agents cannot create responses or drafts.
62 */
63 public function createResponse(Request $request)
64 {
65 return PermissionManager::canManageTickets()
66 || PermissionManager::currentUserCan('fst_draft_reply');
67 }
68
69 /**
70 * Auto-save draft: accessible to manage and draft agents.
71 * View-only agents cannot create drafts.
72 */
73 public function createOrUpdatDraft(Request $request)
74 {
75 return PermissionManager::canManageTickets()
76 || PermissionManager::currentUserCan('fst_draft_reply');
77 }
78
79 /**
80 * Label search save: POST endpoint accessible to any agent with ticket access.
81 */
82 public function storeOrUpdateLabelSearch(Request $request)
83 {
84 return PermissionManager::canAccessTicketRoutes();
85 }
86
87 /**
88 * Label search delete: DELETE endpoint accessible to any agent (personal data).
89 */
90 public function deleteLabelSearch(Request $request)
91 {
92 return PermissionManager::canAccessTicketRoutes();
93 }
94
95 /**
96 * Live activity removal: DELETE endpoint accessible to any agent (cleanup).
97 */
98 public function removeLiveActivity(Request $request)
99 {
100 return PermissionManager::canAccessTicketRoutes();
101 }
102
103 /**
104 * Update ticket property (product, priority, etc.): requires manage ticket permission.
105 */
106 public function updateTicketProperty(Request $request)
107 {
108 return PermissionManager::canManageTickets();
109 }
110
111 /**
112 * Add watchers to a ticket: requires manage ticket permission.
113 */
114 public function addTicketWatchers(Request $request)
115 {
116 return PermissionManager::canManageTickets();
117 }
118
119 /**
120 * Sync watchers on a ticket: requires manage ticket permission.
121 */
122 public function syncTicketWatchers(Request $request)
123 {
124 return PermissionManager::canManageTickets();
125 }
126
127 /**
128 * Update estimated time: requires manage ticket permission.
129 */
130 public function updateEstimatedTime(Request $request)
131 {
132 return PermissionManager::canManageTickets();
133 }
134
135 /**
136 * Manual time commit: requires manage ticket permission.
137 */
138 public function manualCommitTrack(Request $request)
139 {
140 return PermissionManager::canManageTickets();
141 }
142
143 /**
144 * Approve draft response: requires approve permission and ticket route access.
145 */
146 public function approveDraftResponse(Request $request)
147 {
148 return PermissionManager::currentUserCan('fst_approve_draft_reply')
149 && PermissionManager::canAccessTicketRoutes();
150 }
151
152 /**
153 * Delete draft: accessible to draft-capable agents (same as create/update draft).
154 */
155 public function deleteDraft(Request $request)
156 {
157 return PermissionManager::canManageTickets()
158 || PermissionManager::currentUserCan('fst_draft_reply');
159 }
160
161 /**
162 * FluentBot AI-assist actions: accessible to any agent with ticket access.
163 */
164 public function generateResponse(Request $request)
165 {
166 return PermissionManager::canAccessTicketRoutes();
167 }
168
169 public function getRuntimeConfig(Request $request)
170 {
171 return PermissionManager::canAccessTicketRoutes();
172 }
173
174 public function generateStreamResponse(Request $request)
175 {
176 return PermissionManager::canAccessTicketRoutes();
177 }
178
179 public function getTicketSummary(Request $request)
180 {
181 return PermissionManager::canAccessTicketRoutes();
182 }
183
184 public function getTicketTone(Request $request)
185 {
186 return PermissionManager::canAccessTicketRoutes();
187 }
188
189 public function markRead(Request $request)
190 {
191 return PermissionManager::canAccessTicketRoutes();
192 }
193
194 public function markAllRead(Request $request)
195 {
196 return PermissionManager::canAccessTicketRoutes();
197 }
198
199 public function getChatId(Request $request)
200 {
201 return PermissionManager::canAccessTicketRoutes();
202 }
203
204 public function getChatMessages(Request $request)
205 {
206 return PermissionManager::canAccessTicketRoutes();
207 }
208
209 public function getContextSelection(Request $request)
210 {
211 return PermissionManager::canAccessTicketRoutes();
212 }
213
214 public function getConversations(Request $request)
215 {
216 return PermissionManager::canAccessTicketRoutes();
217 }
218
219 public function saveChatId(Request $request)
220 {
221 return PermissionManager::canManageTickets()
222 || PermissionManager::currentUserCan('fst_draft_reply');
223 }
224
225 public function deleteChatId(Request $request)
226 {
227 return PermissionManager::canManageTickets()
228 || PermissionManager::currentUserCan('fst_draft_reply');
229 }
230
231 public function saveContextSelection(Request $request)
232 {
233 return PermissionManager::canManageTickets()
234 || PermissionManager::currentUserCan('fst_draft_reply');
235 }
236
237 public function switchConversation(Request $request)
238 {
239 return PermissionManager::canManageTickets()
240 || PermissionManager::currentUserCan('fst_draft_reply');
241 }
242
243 public function createFeedback(Request $request)
244 {
245 return PermissionManager::canManageTickets()
246 || PermissionManager::currentUserCan('fst_draft_reply');
247 }
248
249 public function deleteFeedback(Request $request)
250 {
251 return PermissionManager::canManageTickets()
252 || PermissionManager::currentUserCan('fst_draft_reply');
253 }
254 }
255