feat: enhance module RBAC permissions, financial billing workflows, task evidence uploading, and role analytics
This commit is contained in:
@@ -14,7 +14,7 @@ class DocumentController extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
$query = Document::with(['uploader:id,name', 'category', 'project', 'approvals.approver']);
|
||||
$query = Document::with(['uploader:id,name,contractor_id', 'category', 'project', 'approvals.approver']);
|
||||
|
||||
if ($search = $request->search) {
|
||||
$query->where('title', 'like', "%{$search}%");
|
||||
@@ -259,6 +259,22 @@ class DocumentController extends Controller
|
||||
|
||||
public function destroy(Document $document)
|
||||
{
|
||||
$user = auth()->user();
|
||||
|
||||
// Platform / Executive roles can delete any document
|
||||
$isExecutive = is_null($user?->contractor_id)
|
||||
|| in_array($user?->user_type, ['admin', 'super_admin'])
|
||||
|| $user?->hasAnyRole(['Super Admin', 'Admin', 'Project Manager', 'Executive']);
|
||||
|
||||
if (!$isExecutive) {
|
||||
// Contractors can delete documents uploaded by anyone in their contractor company
|
||||
$uploaderContractorId = $document->uploader?->contractor_id;
|
||||
$isOwnCompany = ((int)$document->uploaded_by === (int)$user->id)
|
||||
|| ($user->contractor_id && $uploaderContractorId !== null && (int)$uploaderContractorId === (int)$user->contractor_id);
|
||||
|
||||
abort_unless($isOwnCompany, 403, 'Contractors can only delete documents uploaded by their company.');
|
||||
}
|
||||
|
||||
// Delete all version files
|
||||
foreach ($document->versions as $version) {
|
||||
$disk = $this->resolveDisk($version->file_path);
|
||||
|
||||
Reference in New Issue
Block a user