3 namespace BookStack\Http\Controllers;
5 use HttpRequestException;
6 use Illuminate\Foundation\Bus\DispatchesJobs;
7 use Illuminate\Http\Exception\HttpResponseException;
8 use Illuminate\Routing\Controller as BaseController;
9 use Illuminate\Foundation\Validation\ValidatesRequests;
10 use Illuminate\Support\Facades\Auth;
11 use Illuminate\Support\Facades\Session;
14 abstract class Controller extends BaseController
16 use DispatchesJobs, ValidatesRequests;
21 protected $currentUser;
28 * Controller constructor.
30 public function __construct()
32 // Get a user instance for the current user
33 $user = auth()->user();
34 if (!$user) $user = User::getDefault();
36 // Share variables with views
37 view()->share('signedIn', auth()->check());
38 view()->share('currentUser', $user);
40 // Share variables with controllers
41 $this->currentUser = $user;
42 $this->signedIn = auth()->check();
46 * Stops the application and shows a permission error if
47 * the application is in demo mode.
49 protected function preventAccessForDemoUsers()
51 if (config('app.env') === 'demo') $this->showPermissionError();
55 * Adds the page title into the view.
58 public function setPageTitle($title)
60 view()->share('pageTitle', $title);
64 * On a permission error redirect to home and display
65 * the error as a notification.
67 protected function showPermissionError()
69 Session::flash('error', trans('errors.permission'));
70 throw new HttpResponseException(
76 * Checks for a permission.
78 * @param $permissionName
79 * @return bool|\Illuminate\Http\RedirectResponse
81 protected function checkPermission($permissionName)
83 if (!$this->currentUser || !$this->currentUser->can($permissionName)) {
84 $this->showPermissionError();
91 * Check if a user has a permission or bypass if the callback is true.
92 * @param $permissionName
96 protected function checkPermissionOr($permissionName, $callback)
98 $callbackResult = $callback();
99 if ($callbackResult === false) $this->checkPermission($permissionName);