From cec3579f18b9bd03ccb18813f1490ea485c56874 Mon Sep 17 00:00:00 2001 From: Nasrul Hazim Date: Wed, 4 Jul 2018 20:49:37 +0800 Subject: [PATCH 01/11] CI: cache vendor directory --- .travis.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index a6f7a47..3b96c2e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,6 +7,10 @@ php: env: - APP_ENV=testing +cache: + directories: + - vendor + before_script: - travis_retry composer self-update - travis_retry composer update --prefer-source --no-interaction --dev From ce7ae4e926213c9418bacec7d60f94ed8c9dcb2f Mon Sep 17 00:00:00 2001 From: Nasrul Hazim Date: Sun, 22 Jul 2018 13:35:48 +0800 Subject: [PATCH 02/11] Macro: Add Breadcrumb for API --- app/Macros/Routing/Breadcrumb.php | 39 ++++++++++++++++++++++++++ app/Providers/MacroServiceProvider.php | 1 + 2 files changed, 40 insertions(+) create mode 100644 app/Macros/Routing/Breadcrumb.php diff --git a/app/Macros/Routing/Breadcrumb.php b/app/Macros/Routing/Breadcrumb.php new file mode 100644 index 0000000..3748f4a --- /dev/null +++ b/app/Macros/Routing/Breadcrumb.php @@ -0,0 +1,39 @@ +parent($parent); + $breadcrumbs->push($module, route($prefix . '.index')); + }); + + // Module Name > Add + BreadcrumbsManager::register($prefix . '.create', function ($breadcrumbs) use ($prefix) { + $breadcrumbs->parent($prefix . '.index'); + $breadcrumbs->push(__('Add'), route($prefix . '.create')); + }); + + // Module Name > Details + BreadcrumbsManager::register($prefix . '.show', function ($breadcrumbs, $id) use ($prefix) { + $breadcrumbs->parent($prefix . '.index'); + $breadcrumbs->push(__('Details'), route($prefix . '.show', $id)); + }); + + // Module Name > Edit + BreadcrumbsManager::register($prefix . '.edit', function ($breadcrumbs, $id) use ($prefix) { + $breadcrumbs->parent($prefix . '.show', $id); + $breadcrumbs->push(__('Update'), route($prefix . '.edit', $id)); + }); + }); + } + } +} diff --git a/app/Providers/MacroServiceProvider.php b/app/Providers/MacroServiceProvider.php index 5f63cc1..dbf46b9 100644 --- a/app/Providers/MacroServiceProvider.php +++ b/app/Providers/MacroServiceProvider.php @@ -13,6 +13,7 @@ public function boot() { \App\Macros\Http\Response::registerMacros(); \App\Macros\Models\Model::registerMacros(); + \App\Macros\Routing\Breadcrumb::registerMacros(); } /** From 7367af5ccfad6295a4e00b635844e7f696936b7f Mon Sep 17 00:00:00 2001 From: Nasrul Hazim Date: Sun, 22 Jul 2018 14:21:31 +0800 Subject: [PATCH 03/11] Artisan: Added seed:dev Command --- app/Console/Commands/ReloadAllCommand.php | 4 +- app/Console/Commands/ReloadDbCommand.php | 7 +++- .../Commands/SeedDevelopmentDataCommand.php | 42 +++++++++++++++++++ 3 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 app/Console/Commands/SeedDevelopmentDataCommand.php diff --git a/app/Console/Commands/ReloadAllCommand.php b/app/Console/Commands/ReloadAllCommand.php index d8beac0..289440e 100644 --- a/app/Console/Commands/ReloadAllCommand.php +++ b/app/Console/Commands/ReloadAllCommand.php @@ -42,9 +42,7 @@ public function handle() $this->call('make:jwt'); if ($this->option('dev')) { - $this->call('db:seed', [ - '--class' => 'DevelopmentSeeder', - ]); + $this->call('seed:dev'); } } } diff --git a/app/Console/Commands/ReloadDbCommand.php b/app/Console/Commands/ReloadDbCommand.php index 55425f1..3a9b331 100644 --- a/app/Console/Commands/ReloadDbCommand.php +++ b/app/Console/Commands/ReloadDbCommand.php @@ -11,7 +11,8 @@ class ReloadDbCommand extends Command * * @var string */ - protected $signature = 'reload:db'; + protected $signature = 'reload:db + {--d|dev : Seed development data}'; /** * The console command description. @@ -38,5 +39,9 @@ public function handle() $this->call('migrate:fresh', ['--seed' => true]); $this->info('Seeding Profile Dependencies'); $this->call('profile:seed'); + + if ($this->option('dev')) { + $this->call('seed:dev'); + } } } diff --git a/app/Console/Commands/SeedDevelopmentDataCommand.php b/app/Console/Commands/SeedDevelopmentDataCommand.php new file mode 100644 index 0000000..8f659d6 --- /dev/null +++ b/app/Console/Commands/SeedDevelopmentDataCommand.php @@ -0,0 +1,42 @@ +call('db:seed', ['--class' => 'DevelopmentSeeder']); + } +} From a4a23067b1ae790e16f68d21264c2d24e2c33fb3 Mon Sep 17 00:00:00 2001 From: Nasrul Hazim Date: Sun, 22 Jul 2018 14:22:06 +0800 Subject: [PATCH 04/11] Artisan: Added seed:dev --- app/Console/Kernel.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 2505ac7..0955153 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -17,6 +17,7 @@ class Kernel extends ConsoleKernel Commands\ReloadAllCommand::class, Commands\ReloadCacheCommand::class, Commands\ReloadDbCommand::class, + Commands\SeedDevelopmentDataCommand::class, ]; /** From 7c4a9dfe5125b98e093592068e7807f4282399aa Mon Sep 17 00:00:00 2001 From: Nasrul Hazim Date: Sun, 22 Jul 2018 14:23:26 +0800 Subject: [PATCH 05/11] Reorganise route setup. --- app/Providers/RouteServiceProvider.php | 30 ++++++++++++++----- routes/api.php | 17 ----------- .../{breadcrumbs.php => breadcrumbs/__.php} | 7 +---- .../{datatable.php => datatable/manage.php} | 0 routes/{web.php => web/__.php} | 7 +---- 5 files changed, 24 insertions(+), 37 deletions(-) delete mode 100644 routes/api.php rename routes/{breadcrumbs.php => breadcrumbs/__.php} (50%) rename routes/{datatable.php => datatable/manage.php} (100%) rename routes/{web.php => web/__.php} (82%) diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index dc912d7..55f9ecf 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -30,7 +30,6 @@ public function boot() public function map() { $this->mapApiRoutes(); - $this->mapDatatableRoutes(); $this->mapWebRoutes(); } @@ -43,7 +42,12 @@ protected function mapWebRoutes() { Route::middleware('web') ->namespace($this->namespace) - ->group(base_path('routes/web.php')); + ->group(function () { + collect(glob(base_path('/routes/web/*.php'))) + ->each(function ($path) { + require $path; + }); + }); } /** @@ -57,7 +61,22 @@ protected function mapApiRoutes() ->middleware('api') ->as('api.') ->namespace($this->namespace . '\Api') - ->group(base_path('routes/api.php')); + ->group(function () { + collect(glob(base_path('/routes/api/*.php'))) + ->each(function ($path) { + require $path; + }); + + Route::prefix('datatable') + ->as('.datatable.') + ->namespace('\Datatable') + ->group(function () { + collect(glob(base_path('/routes/datatable/*.php'))) + ->each(function ($path) { + require $path; + }); + }); + }); } /** @@ -67,10 +86,5 @@ protected function mapApiRoutes() */ protected function mapDatatableRoutes() { - Route::prefix('api/datatable') - ->middleware('api') - ->as('api.datatable.') - ->namespace($this->namespace . '\Api\Datatable') - ->group(base_path('routes/datatable.php')); } } diff --git a/routes/api.php b/routes/api.php deleted file mode 100644 index 43fcf0f..0000000 --- a/routes/api.php +++ /dev/null @@ -1,17 +0,0 @@ -each(function ($path) { - require $path; - }); diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs/__.php similarity index 50% rename from routes/breadcrumbs.php rename to routes/breadcrumbs/__.php index e301cc1..b65c5b7 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs/__.php @@ -3,9 +3,4 @@ // Home Breadcrumbs::register('home', function ($breadcrumbs) { $breadcrumbs->push(__('Home'), route('home')); -}); - -collect(glob(base_path('/routes/breadcrumbs/*.php'))) - ->each(function ($path) { - require $path; - }); +}); \ No newline at end of file diff --git a/routes/datatable.php b/routes/datatable/manage.php similarity index 100% rename from routes/datatable.php rename to routes/datatable/manage.php diff --git a/routes/web.php b/routes/web/__.php similarity index 82% rename from routes/web.php rename to routes/web/__.php index 9fe915b..c80c8a8 100644 --- a/routes/web.php +++ b/routes/web/__.php @@ -13,9 +13,4 @@ Route::get('/', 'WelcomeController')->name('welcome'); Route::get('/home', 'HomeController@index')->name('home'); -Route::get('/language/{language}', 'LanguageController')->name('language'); - -collect(glob(base_path('/routes/web/*.php'))) - ->each(function ($path) { - require $path; - }); +Route::get('/language/{language}', 'LanguageController')->name('language'); \ No newline at end of file From b8e9f15851f3d70e5b5ab850aeda66450f97bc6c Mon Sep 17 00:00:00 2001 From: Nasrul Hazim Date: Sun, 22 Jul 2018 14:25:29 +0800 Subject: [PATCH 06/11] Update breadcrumb config --- config/breadcrumbs.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/breadcrumbs.php b/config/breadcrumbs.php index 726876f..df07472 100644 --- a/config/breadcrumbs.php +++ b/config/breadcrumbs.php @@ -31,7 +31,7 @@ | */ - 'files' => base_path('routes/breadcrumbs.php'), + 'files' => glob(base_path('routes/breadcrumbs/*.php')), /* |-------------------------------------------------------------------------- From 9e27e6d8b5ca28c169af1e916a4594db3cc3c350 Mon Sep 17 00:00:00 2001 From: Nasrul Hazim Date: Sun, 22 Jul 2018 14:27:18 +0800 Subject: [PATCH 07/11] Fixed datatable API Datatable route setup --- app/Providers/RouteServiceProvider.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index 55f9ecf..a747fc3 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -68,7 +68,7 @@ protected function mapApiRoutes() }); Route::prefix('datatable') - ->as('.datatable.') + ->as('datatable.') ->namespace('\Datatable') ->group(function () { collect(glob(base_path('/routes/datatable/*.php'))) From 0128a6e639d16720df27c4793fb93189e5c29fce Mon Sep 17 00:00:00 2001 From: Nasrul Hazim Date: Sun, 22 Jul 2018 17:19:49 +0800 Subject: [PATCH 08/11] Helper: Added role() and permission() --- app/Support/helpers.php | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/app/Support/helpers.php b/app/Support/helpers.php index fda332c..642662c 100644 --- a/app/Support/helpers.php +++ b/app/Support/helpers.php @@ -1,5 +1,7 @@ Date: Sun, 22 Jul 2018 17:20:36 +0800 Subject: [PATCH 09/11] ACL: Added ACL Permission --- config/acl.php | 1 + 1 file changed, 1 insertion(+) diff --git a/config/acl.php b/config/acl.php index a793e7e..97efd3e 100644 --- a/config/acl.php +++ b/config/acl.php @@ -10,6 +10,7 @@ 'setting' => ['developer', 'administrator'], 'passport' => ['developer'], 'user' => ['developer', 'administrator'], + 'acl' => ['developer', 'administrator'], ], 'actions' => [ 'index', 'show', From 48399e4c0803e29569cc34a54eed904be63b9abc Mon Sep 17 00:00:00 2001 From: Nasrul Hazim Date: Sun, 22 Jul 2018 17:21:50 +0800 Subject: [PATCH 10/11] ACL: Setup ACL --- .../Controllers/Api/Manage/AclController.php | 48 +++++++ app/Http/Controllers/Manage/AclController.php | 85 +++++++++++ .../navigations/nav-menus.blade.php | 4 + resources/views/manage/acl/index.blade.php | 136 ++++++++++++++++++ routes/api/manage.php | 1 + routes/breadcrumbs/__.php | 6 + routes/web/manage.php | 1 + 7 files changed, 281 insertions(+) create mode 100644 app/Http/Controllers/Api/Manage/AclController.php create mode 100644 app/Http/Controllers/Manage/AclController.php create mode 100644 resources/views/manage/acl/index.blade.php diff --git a/app/Http/Controllers/Api/Manage/AclController.php b/app/Http/Controllers/Api/Manage/AclController.php new file mode 100644 index 0000000..666d945 --- /dev/null +++ b/app/Http/Controllers/Api/Manage/AclController.php @@ -0,0 +1,48 @@ +type) { + case 'create': + $permissions = [ + $request->permission . '_create', + $request->permission . '_store', + ]; + break; + case 'view': + $permissions = [ + $request->permission . '_index', + $request->permission . '_show', + ]; + break; + case 'update': + $permissions = [ + $request->permission . '_edit', + $request->permission . '_update', + ]; + break; + case 'destroy': + $permissions = [ + $request->permission . '_destroy', + ]; + break; + } + + $role = role($request->role); + + foreach ($permissions as $permission) { + if($request->revoke) { + $role->revokePermissionTo($permission); + } else { + $role->givePermissionTo($permission); + } + } + } +} diff --git a/app/Http/Controllers/Manage/AclController.php b/app/Http/Controllers/Manage/AclController.php new file mode 100644 index 0000000..7e30cac --- /dev/null +++ b/app/Http/Controllers/Manage/AclController.php @@ -0,0 +1,85 @@ +Users @endcan + + @can('acl_index') + ACL + @endcan