From a5ed4c2fd70bf344de3e7083e4c918bc99072a5e Mon Sep 17 00:00:00 2001 From: Owen Date: Sun, 8 Jan 2017 17:04:30 +0000 Subject: [PATCH 01/10] added ability to separate users and admins via guards --- src/BaseServiceProvider.php | 29 ++++++++++++++--- src/app/Http/Controllers/AdminController.php | 6 +++- .../Auth/ForgotPasswordController.php | 15 ++++++++- .../Http/Controllers/Auth/LoginController.php | 15 ++++++++- .../Controllers/Auth/RegisterController.php | 15 ++++++++- .../Auth/ResetPasswordController.php | 15 ++++++++- .../Http/Middleware/BackpackAdminGuard.php | 30 ++++++++++++++++++ .../{Admin.php => BackpackBaseAdmin.php} | 2 +- src/config/backpack/base.php | 8 +++++ src/helpers.php | 31 +++++++++++++++++++ src/resources/views/inc/menu.blade.php | 2 +- src/resources/views/inc/sidebar.blade.php | 6 ++-- 12 files changed, 160 insertions(+), 14 deletions(-) create mode 100644 src/app/Http/Middleware/BackpackAdminGuard.php rename src/app/Http/Middleware/{Admin.php => BackpackBaseAdmin.php} (96%) create mode 100644 src/helpers.php diff --git a/src/BaseServiceProvider.php b/src/BaseServiceProvider.php index 2319803c..bfdaf690 100644 --- a/src/BaseServiceProvider.php +++ b/src/BaseServiceProvider.php @@ -5,6 +5,7 @@ use Illuminate\Routing\Router; use Illuminate\Support\ServiceProvider; use Route; +use Config; class BaseServiceProvider extends ServiceProvider { @@ -22,19 +23,30 @@ class BaseServiceProvider extends ServiceProvider */ public function boot(\Illuminate\Routing\Router $router) { + // ------------- // LOAD THE VIEWS - // - first the published views (in case they have any changes) + // ------------- + // first the published views (in case they have any changes) $this->loadViewsFrom(resource_path('views/vendor/backpack/base'), 'backpack'); - // - then the stock views that come with the package, in case a published view might be missing + // then the stock views that come with the package, in case a published view might be missing $this->loadViewsFrom(realpath(__DIR__.'/resources/views'), 'backpack'); $this->loadTranslationsFrom(realpath(__DIR__.'/resources/lang'), 'backpack'); // use the vendor configuration file as fallback $this->mergeConfigFrom( - __DIR__.'/config/backpack/base.php', 'backpack.base' + __DIR__.'/config/backpack/base.php', + 'backpack.base' ); + // ------------- + // AUTH GUARD CONFIGURATION + // ------------- + $appAuthGuards = Config::get('auth.guards'); + $backpackAuthGuard = Config::get('backpack.base.admin_guard'); + $appAuthGuards[$backpackAuthGuard['name']] = $backpackAuthGuard; + Config::set('auth.guards', $appAuthGuards); + $this->setupRoutes($this->app->router); // ------------- @@ -52,6 +64,11 @@ public function boot(\Illuminate\Routing\Router $router) $this->publishes([__DIR__.'/public' => public_path('vendor/backpack')], 'public'); // publish public AdminLTE assets $this->publishes([base_path('vendor/almasaeed2010/adminlte') => public_path('vendor/adminlte')], 'adminlte'); + + // ------------- + // HELPERS + // ------------- + require_once(__DIR__.'/helpers.php'); } /** @@ -64,7 +81,11 @@ public function boot(\Illuminate\Routing\Router $router) public function setupRoutes(Router $router) { // register the 'admin' middleware - $router->middleware('admin', app\Http\Middleware\Admin::class); + $router->middleware('backpack.base.admin', app\Http\Middleware\BackpackBaseAdmin::class); + + if (config('backpack.base.separate_admin_session')) { + $router->middleware('backpack.admin.guard', app\Http\Middleware\BackpackAdminGuard::class); + } $router->group(['namespace' => 'Backpack\Base\app\Http\Controllers'], function ($router) { Route::group( diff --git a/src/app/Http/Controllers/AdminController.php b/src/app/Http/Controllers/AdminController.php index 7ee790bd..58dfb377 100644 --- a/src/app/Http/Controllers/AdminController.php +++ b/src/app/Http/Controllers/AdminController.php @@ -11,7 +11,11 @@ class AdminController extends Controller */ public function __construct() { - $this->middleware('admin'); + if (config('backpack.base.separate_admin_session')) { + $this->middleware('backpack.admin.guard'); + } else { + $this->middleware('backpack.base.admin'); + } } /** diff --git a/src/app/Http/Controllers/Auth/ForgotPasswordController.php b/src/app/Http/Controllers/Auth/ForgotPasswordController.php index 65060e77..488c305d 100644 --- a/src/app/Http/Controllers/Auth/ForgotPasswordController.php +++ b/src/app/Http/Controllers/Auth/ForgotPasswordController.php @@ -29,7 +29,20 @@ class ForgotPasswordController extends Controller */ public function __construct() { - $this->middleware('guest'); + if (config('backpack.base.separate_admin_session')) { + $this->middleware('guest:'.config('backpack.base.admin_guard.name'), ['except' => 'logout']); + } else { + $this->middleware('guest'); + } + } + + public function guard() + { + if (config('backpack.base.separate_admin_session')) { + return \Auth::guard(config('backpack.base.admin_guard.name')); + } else { + return \Auth::guard(); + } } // ------------------------------------------------------- diff --git a/src/app/Http/Controllers/Auth/LoginController.php b/src/app/Http/Controllers/Auth/LoginController.php index 9cde6abf..c1de33f1 100644 --- a/src/app/Http/Controllers/Auth/LoginController.php +++ b/src/app/Http/Controllers/Auth/LoginController.php @@ -31,7 +31,11 @@ class LoginController extends Controller */ public function __construct() { - $this->middleware('guest', ['except' => 'logout']); + if (config('backpack.base.separate_admin_session')) { + $this->middleware('guest:'.config('backpack.base.admin_guard.name'), ['except' => 'logout']); + } else { + $this->middleware('guest', ['except' => 'logout']); + } // ---------------------------------- // Use the admin prefix in all routes @@ -50,6 +54,15 @@ public function __construct() // ---------------------------------- } + public function guard() + { + if (config('backpack.base.separate_admin_session')) { + return \Auth::guard(config('backpack.base.admin_guard.name')); + } else { + return \Auth::guard(); + } + } + // ------------------------------------------------------- // Laravel overwrites for loading backpack views // ------------------------------------------------------- diff --git a/src/app/Http/Controllers/Auth/RegisterController.php b/src/app/Http/Controllers/Auth/RegisterController.php index 9836bca4..f290b216 100644 --- a/src/app/Http/Controllers/Auth/RegisterController.php +++ b/src/app/Http/Controllers/Auth/RegisterController.php @@ -30,13 +30,26 @@ class RegisterController extends Controller */ public function __construct() { - $this->middleware('guest'); + if (config('backpack.base.separate_admin_session')) { + $this->middleware('guest:'.config('backpack.base.admin_guard.name'), ['except' => 'logout']); + } else { + $this->middleware('guest'); + } // Where to redirect users after login / registration. $this->redirectTo = property_exists($this, 'redirectTo') ? $this->redirectTo : config('backpack.base.route_prefix', 'dashboard'); } + public function guard() + { + if (config('backpack.base.separate_admin_session')) { + return \Auth::guard(config('backpack.base.admin_guard.name')); + } else { + return \Auth::guard(); + } + } + /** * Get a validator for an incoming registration request. * diff --git a/src/app/Http/Controllers/Auth/ResetPasswordController.php b/src/app/Http/Controllers/Auth/ResetPasswordController.php index efeb8ee0..f83f964a 100644 --- a/src/app/Http/Controllers/Auth/ResetPasswordController.php +++ b/src/app/Http/Controllers/Auth/ResetPasswordController.php @@ -30,12 +30,25 @@ class ResetPasswordController extends Controller */ public function __construct() { - $this->middleware('guest'); + if (config('backpack.base.separate_admin_session')) { + $this->middleware('guest:'.config('backpack.base.admin_guard.name'), ['except' => 'logout']); + } else { + $this->middleware('guest'); + } // where to redirect after password was reset $this->redirectTo = property_exists($this, 'redirectTo') ? $this->redirectTo : config('backpack.base.route_prefix', 'admin').'/dashboard'; } + public function guard() + { + if (config('backpack.base.separate_admin_session')) { + return \Auth::guard(config('backpack.base.admin_guard.name')); + } else { + return \Auth::guard(); + } + } + // ------------------------------------------------------- // Laravel overwrites for loading backpack views // ------------------------------------------------------- diff --git a/src/app/Http/Middleware/BackpackAdminGuard.php b/src/app/Http/Middleware/BackpackAdminGuard.php new file mode 100644 index 00000000..a8cddeaa --- /dev/null +++ b/src/app/Http/Middleware/BackpackAdminGuard.php @@ -0,0 +1,30 @@ +check()) { + if ($request->ajax() || $request->wantsJson()) { + return response(trans('backpack::base.unauthorized'), 401); + } + + return redirect(config('backpack.base.route_prefix').'/login'); + } + } + + return $next($request); + } +} diff --git a/src/app/Http/Middleware/Admin.php b/src/app/Http/Middleware/BackpackBaseAdmin.php similarity index 96% rename from src/app/Http/Middleware/Admin.php rename to src/app/Http/Middleware/BackpackBaseAdmin.php index 8a622c15..9221bafa 100644 --- a/src/app/Http/Middleware/Admin.php +++ b/src/app/Http/Middleware/BackpackBaseAdmin.php @@ -5,7 +5,7 @@ use Closure; use Illuminate\Support\Facades\Auth; -class Admin +class BackpackBaseAdmin { /** * Handle an incoming request. diff --git a/src/config/backpack/base.php b/src/config/backpack/base.php index 82042a62..78625dac 100644 --- a/src/config/backpack/base.php +++ b/src/config/backpack/base.php @@ -75,4 +75,12 @@ // Fully qualified namespace of the User model 'user_model_fqn' => '\App\User', + 'separate_admin_session' => false, + + 'admin_guard' => [ + 'name' => 'admin', + 'driver' => 'session', + 'provider' => 'users', + ], + ]; diff --git a/src/helpers.php b/src/helpers.php new file mode 100644 index 00000000..be9120bb --- /dev/null +++ b/src/helpers.php @@ -0,0 +1,31 @@ +user(); + } +} + +/** + * Returns back a user instance without + * the admin guard, however allows you + * to pass in a custom guard if you like. + */ +if (!function_exists('backpack_user')) { + function backpack_user($guard = null) + { + return \Auth::guard($guard)->user(); + } +} diff --git a/src/resources/views/inc/menu.blade.php b/src/resources/views/inc/menu.blade.php index 0b47cbdf..eb62c844 100644 --- a/src/resources/views/inc/menu.blade.php +++ b/src/resources/views/inc/menu.blade.php @@ -19,7 +19,7 @@ - @if (Auth::guest()) + @if (!backpack_admin())
  • {{ trans('backpack::base.login') }}
  • @if (config('backpack.base.registration_open'))
  • {{ trans('backpack::base.register') }}
  • diff --git a/src/resources/views/inc/sidebar.blade.php b/src/resources/views/inc/sidebar.blade.php index a6a7fd22..87acb8db 100644 --- a/src/resources/views/inc/sidebar.blade.php +++ b/src/resources/views/inc/sidebar.blade.php @@ -1,4 +1,4 @@ -@if (Auth::check()) +@if (backpack_admin())