X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/0513239c25dcddf696ad9171f167295fa93661e9..refs/pull/63/head:/app/Http/Controllers/Controller.php diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index 48a58ca99..ab37a44a1 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -1,28 +1,103 @@ share('signedIn', Auth::check()); - $user = Auth::user(); - if(!$user) { - $user = User::getDefault(); + // Get a user instance for the current user + $user = auth()->user(); + if (!$user) $user = User::getDefault(); + + // Share variables with views + view()->share('signedIn', auth()->check()); + view()->share('currentUser', $user); + + // Share variables with controllers + $this->currentUser = $user; + $this->signedIn = auth()->check(); + } + + /** + * Stops the application and shows a permission error if + * the application is in demo mode. + */ + protected function preventAccessForDemoUsers() + { + if (config('app.env') === 'demo') $this->showPermissionError(); + } + + /** + * Adds the page title into the view. + * @param $title + */ + public function setPageTitle($title) + { + view()->share('pageTitle', $title); + } + + /** + * On a permission error redirect to home and display + * the error as a notification. + */ + protected function showPermissionError() + { + Session::flash('error', trans('errors.permission')); + throw new HttpResponseException( + redirect('/') + ); + } + + /** + * Checks for a permission. + * + * @param $permissionName + * @return bool|\Illuminate\Http\RedirectResponse + */ + protected function checkPermission($permissionName) + { + if (!$this->currentUser || !$this->currentUser->can($permissionName)) { + $this->showPermissionError(); } - view()->share('user', $user); + + return true; + } + + /** + * Check if a user has a permission or bypass if the callback is true. + * @param $permissionName + * @param $callback + * @return bool + */ + protected function checkPermissionOr($permissionName, $callback) + { + $callbackResult = $callback(); + if ($callbackResult === false) $this->checkPermission($permissionName); + return true; } }