Skip to content

Commit 2ce0bb3

Browse files
committed
feat: added upload file permission
1 parent a512388 commit 2ce0bb3

File tree

6 files changed

+38
-9
lines changed

6 files changed

+38
-9
lines changed

app/Http/Controllers/MapController.php

+8
Original file line numberDiff line numberDiff line change
@@ -180,10 +180,18 @@ public function storeFromFile(Request $request)
180180
$request->merge(['markers' => $parsedData['markers']]);
181181

182182
try {
183+
$this->authorize('uploadFromFile', [Marker::class, $map]);
184+
183185
$validated_data = Marker::validateRequestForBulkInsert($request, $map);
184186
Marker::bulkInsertWithLocations($validated_data['markers'], $map);
185187
// Set response code
186188
return response()->json(new MapResource($map), 201);
189+
} catch (\Illuminate\Validation\ValidationException $e) {
190+
$map->delete();
191+
throw $e;
192+
} catch (\Illuminate\Auth\Access\AuthorizationException $e) {
193+
$map->delete();
194+
throw $e;
187195
} catch (\Exception $e) {
188196
$map->delete();
189197
return response()->json(['error' => 'Error while saving map'], 500);

app/Http/Controllers/MarkerController.php

+8-2
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ public function storeInBulk(Request $request, Map $map)
148148
*/
149149
public function storeInBulkFromFile(Request $request, Map $map)
150150
{
151-
$this->authorize('createInBulk', [Marker::class, $map, $request->input('map_token')]);
151+
$this->authorize('uploadFromFile', [Marker::class, $map, $request->input('map_token')]);
152152

153153
// Get the uploaded file type for debug
154154
$fileMimeType = $request->file('file')->getMimeType();
@@ -179,7 +179,13 @@ public function storeInBulkFromFile(Request $request, Map $map)
179179

180180
$request->merge(['markers' => $markers]);
181181

182-
return $this->storeInBulk($request, $map);
182+
try {
183+
$validated_data = Marker::validateRequestForBulkInsert($request, $map);
184+
} catch (\Illuminate\Validation\ValidationException $e) {
185+
throw $e;
186+
}
187+
188+
return Marker::bulkInsertWithLocations($validated_data['markers'], $map);
183189
}
184190

185191
/**

app/Policies/MarkerPolicy.php

+15
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,21 @@ public function createInBulk(User $user, Map $map, $token = null)
8080
return $user->hasVerifiedEmail() && $user->hasPermissionTo('create markers in bulk', 'web');
8181
}
8282

83+
/**
84+
* Determine whether the user can create markers.
85+
*
86+
* @param User $user
87+
* @return bool
88+
*/
89+
public function uploadFromFile(User $user, Map $map, $token = null)
90+
{
91+
if ($map->users_can_create_markers == 'no') {
92+
return $map->user_id == $user->id;
93+
}
94+
95+
return $user->hasVerifiedEmail() && $user->hasPermissionTo('upload markers from file', 'web');
96+
}
97+
8398
/**
8499
* Determine whether the user can update the marker.
85100
*

routes/console.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,11 @@
3333
Artisan::command('make:permissions', function () {
3434
$this->info('Making permissions');
3535

36-
Artisan::call('permission:create-role admin web "manage markers|edit markers|create markers|delete markers|manage categories|edit categories|create categories|delete categories|manage user roles|manage roles|apply to report|manage maps|create markers in bulk|mark spam"');
36+
Artisan::call('permission:create-role admin web "manage markers|edit markers|create markers|delete markers|manage categories|edit categories|create categories|delete categories|manage user roles|manage roles|apply to report|manage maps|create markers in bulk|mark spam|upload markers from file"');
3737

3838
Artisan::call('permission:create-role editor web "manage markers|manage categories|manage maps"');
3939

40-
Artisan::call('permission:create-role "power reporter" web "create markers in bulk"');
40+
Artisan::call('permission:create-role "power reporter" web "create markers in bulk|upload markers from file"');
4141

4242
Artisan::call('permission:create-role reporter web "edit markers|create markers|delete markers|mark spam"');
4343

tests/Unit/MapTest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ public function testCreateMapFromGpxTest()
226226
/**
227227
* @var \Illuminate\Contracts\Auth\Authenticatable
228228
*/
229-
$user = $user->givePermissionTo('create markers in bulk');
229+
$user = $user->givePermissionTo('upload markers from file');
230230

231231
$this->actingAs($user, 'api');
232232

tests/Unit/MarkerTest.php

+4-4
Original file line numberDiff line numberDiff line change
@@ -455,7 +455,7 @@ public function testCreateMarkerInBulkWithGpxFile()
455455
/**
456456
* @var \Illuminate\Contracts\Auth\Authenticatable
457457
*/
458-
$user = $user->givePermissionTo('create markers in bulk');
458+
$user = $user->givePermissionTo('upload markers from file');
459459

460460
$this->actingAs($user, 'api');
461461

@@ -520,7 +520,7 @@ public function testCreateMarkerInBulkWithGpxFileFailWithRequiredLinks()
520520
/**
521521
* @var \Illuminate\Contracts\Auth\Authenticatable
522522
*/
523-
$user = $user->givePermissionTo('create markers in bulk');
523+
$user = $user->givePermissionTo('upload markers from file');
524524

525525
$this->actingAs($user, 'api');
526526

@@ -559,7 +559,7 @@ public function testCreateMarkerInBulkWithSecondGpxFile()
559559
/**
560560
* @var \Illuminate\Contracts\Auth\Authenticatable
561561
*/
562-
$user = $user->givePermissionTo('create markers in bulk');
562+
$user = $user->givePermissionTo('upload markers from file');
563563

564564
$this->actingAs($user, 'api');
565565

@@ -593,7 +593,7 @@ public function testCreateMarkerInBulkWithGeoJSONFile()
593593
/**
594594
* @var \Illuminate\Contracts\Auth\Authenticatable
595595
*/
596-
$user = $user->givePermissionTo('create markers in bulk');
596+
$user = $user->givePermissionTo('upload markers from file');
597597

598598
$this->actingAs($user, 'api');
599599

0 commit comments

Comments
 (0)