<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;

class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

    protected function authorizeAccessToAdminPanel($additionalPermission = null)
    {
        $this->authorizeForUser($this->getUser(), 'admin:access');

        if (!is_null($additionalPermission))
        {
            $this->authorizeForUser($this->getUser(), $additionalPermission);
        }
    }

    /**
     * Gets either the authenticated user, or a user object representing the anonymous user.
     * @return User
     */
    protected function getUser()
    {
        $user = Auth::user();
        return (is_null($user)
            ? User::anonymous()
            : $user);
    }
}
