I want to make a private directory using Laravel 6

Viewed 41

I want to make a private directory using Laravel 6.
Only users who have already logged in can access the directory.
So, I implemented below:

routes/web.php

Route::group(['middleware' => ['private_web']], function() {  // 'private_web' includes auth
    Route::get('/private/{path?}', 'PrivateController@index')->name('private')->where('path', '.*');
});

PrivateController.php

public function index(Request $request, $path = null) {
    $storage_path = 'private/' . $path;
    $mime_type = Storage::mimeType($storage_path);
    $headers = [ 'Content-Type' => $mime_type, ];
    return Storage::response($storage_path, null, $headers);
}

It is working.
But, when I got a html from the directory using Chrome, a css linked from the html wasn't applied (the css is in private directory and just downloaded successfully).
The cause is already known and it is Storage::mimeType returns 'text/plain' against css.
I can fix it by making a branch:

if (ends_with($path, '.css')) {
    $mime_type = 'text/css';
} else {
    $mime_type = Storage::mimeType($storage_path);
}

Question:
Is there more better solution? I'm afraid of increasing such branch at each file type...

thanks.

0 Answers
Related