couple general comments:
You can move the auth check into a gate so its re-usable in other places around the site.
You should drop the check for hasFile() and the duplicate validation check for images validation. This will prevent all the user submitted fields from being lost if the user doesn't include a file and will check that its not only been included, but is a valid image. You can also drop the required and mimes checks, since image does this checks already.
Not sure if/how you're using a repository but it seems like you can replace three command sequence $subscription = new subscriptions([...]);, $subscription->save(); and $subscription = DB::table()... with a single $subscription = Subscription::create([...]); or similar from your repository.
If you're using Laravel 5.3 or newer you can replace all your file manipulation stuff with a simpler command set as well. You don't need to check that the request has a file again, you're already doing that and exiting if it doesn't. I would even suggest moving the file resize into a job that happens outside the controller.
My $1.25:
Create a gate to authorize actions. This goes in your App\Providers\AuthServiceProvider
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
Gate::define('create-subscription-post', function ($user) {
return $user->role_id < 5;
});
}
Then refactor your method for creating subscriptions
public function createSubscriptionPost(Request $request)
{
// Authorize the action.
if (Gate::denies('create-subscription-post', $post)) {
return back()->with('errorstatus', 'You don\'t have permission for this action.');
}
// Validate the submitted data
$this->validate($request, [
'name' => 'required|max:50',
'credits' => 'numeric|required',
'price' => 'numeric|required',
'xpmultiplier' => 'numeric|required',
'escalating' => 'required',
'image' => 'image',
]);
// Looks like in your screenshot you might be implementing a
// repository, since I dont know anything about your repository
// Ive swapped the code here for the standard Laravel Eloquent
// methods, this may or maynot be useful to you.
//
// Also, for simplification Im assuming you have $fillable properly
// set in order to allow the use of $request->all() here.
$subscription = Subscription::create($request->all());
// Deal with the uploaded file (assumed your using Intervention Image)
$imagePath = $request->file('image')->store(public_path());
Image::make($imagePath)->resize(200, 200)->save($imagePath);
$subscription->update(['image' => $imagePath]);
// Done
return back()->with('status', 'Succesfully created subscription logo!');
}