From babffc06f23799e694dbe7a7fc5e0e82c531dfbf Mon Sep 17 00:00:00 2001 From: denisdulici Date: Fri, 3 Apr 2020 10:01:53 +0300 Subject: [PATCH 1/3] only admins --- modules/OfflinePayments/Listeners/InstallModule.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/OfflinePayments/Listeners/InstallModule.php b/modules/OfflinePayments/Listeners/InstallModule.php index 8fa5510f0..9f538c046 100644 --- a/modules/OfflinePayments/Listeners/InstallModule.php +++ b/modules/OfflinePayments/Listeners/InstallModule.php @@ -26,7 +26,7 @@ class InstallModule protected function updatePermissions() { - $this->attachPermissionsToAllRoles([ + $this->attachPermissionsToAdminRoles([ $this->createModuleSettingPermission('offline-payments', 'read'), $this->createModuleSettingPermission('offline-payments', 'update'), $this->createModuleSettingPermission('offline-payments', 'delete'), From 04f2872e62a30fa72925038ec4b1ec5b0d095ac9 Mon Sep 17 00:00:00 2001 From: denisdulici Date: Fri, 3 Apr 2020 13:50:49 +0300 Subject: [PATCH 2/3] improved permission attachment --- app/Traits/Permissions.php | 45 ++++++++++++++----- .../Http/Controllers/Settings.php | 3 +- .../Listeners/InstallModule.php | 9 ++-- 3 files changed, 41 insertions(+), 16 deletions(-) diff --git a/app/Traits/Permissions.php b/app/Traits/Permissions.php index 02a68a4ac..197bb56b5 100644 --- a/app/Traits/Permissions.php +++ b/app/Traits/Permissions.php @@ -43,15 +43,17 @@ trait Permissions public function attachPermissionsToAllRoles($permissions, $require = 'read-admin-panel') { - $roles = Role::all()->filter(function ($r) use ($require) { - return $require ? $r->hasPermission($require) : true; - }); + $this->getRoles($require)->each(function ($role) use ($permissions) { + foreach ($permissions as $id => $permission) { + if ($this->isActionList($permission)) { + $this->attachPermissionsByAction($role, $id, $permission); + + continue; + } - foreach ($roles as $role) { - foreach ($permissions as $permission) { $this->attachPermission($role, $permission); } - } + }); } public function detachPermissionsByRoleNames($roles) @@ -200,13 +202,18 @@ trait Permissions } public function createModuleSettingPermission($module, $action) + { + return $this->createModuleControllerPermission($module, $action, 'settings'); + } + + public function createModuleControllerPermission($module, $action, $controller) { if (is_string($module)) { $module = module($module); } - $name = $action . '-' . $module->getAlias() . '-settings'; - $display_name = Str::title($action) . ' ' . $module->getName() . ' Settings'; + $name = $action . '-' . $module->getAlias() . '-' . $controller; + $display_name = Str::title($action) . ' ' . $module->getName() . ' ' . Str::title($controller); return $this->createPermission($name, $display_name); } @@ -276,7 +283,8 @@ trait Permissions return false; } - return (strlen($permission) == '1') || Str::contains($permission, ','); + // c || c,r,u,d + return (Str::length($permission) == 1) || Str::contains($permission, ','); } public function attachPermissionsByAction($role, $page, $action_list) @@ -296,6 +304,23 @@ trait Permissions public function getPermissionDisplayName($name) { - return Str::title(str_replace('-', ' ', $name)); + if (!empty($this->alias)) { + $name = str_replace($this->alias, '{Module Placeholder}', $name); + } + + $name = Str::title(str_replace('-', ' ', $name)); + + if (!empty($this->alias)) { + $name = str_replace('{Module Placeholder}', module($this->alias)->getName(), $name); + } + + return $name; + } + + public function getRoles($require = 'read-admin-panel') + { + return Role::all()->filter(function ($role) use ($require) { + return $require ? $role->hasPermission($require) : true; + }); } } diff --git a/modules/OfflinePayments/Http/Controllers/Settings.php b/modules/OfflinePayments/Http/Controllers/Settings.php index c81d41c36..806c0f333 100644 --- a/modules/OfflinePayments/Http/Controllers/Settings.php +++ b/modules/OfflinePayments/Http/Controllers/Settings.php @@ -11,7 +11,6 @@ use Modules\OfflinePayments\Http\Requests\SettingDelete as DRequest; class Settings extends Controller { - /** * Show the form for editing the specified resource. * @@ -157,7 +156,7 @@ class Settings extends Controller $message = trans('messages.success.deleted', ['type' => $remove['name']]); - // because it show nofitication. + // because it show notification. //flash($message)->success(); return response()->json([ diff --git a/modules/OfflinePayments/Listeners/InstallModule.php b/modules/OfflinePayments/Listeners/InstallModule.php index 9f538c046..2308f0b4d 100644 --- a/modules/OfflinePayments/Listeners/InstallModule.php +++ b/modules/OfflinePayments/Listeners/InstallModule.php @@ -9,6 +9,8 @@ class InstallModule { use Permissions; + public $alias = 'offline-payments'; + /** * Handle the event. * @@ -17,7 +19,7 @@ class InstallModule */ public function handle(Event $event) { - if ($event->alias != 'offline-payments') { + if ($event->alias != $this->alias) { return; } @@ -26,10 +28,9 @@ class InstallModule protected function updatePermissions() { + // c=create, r=read, u=update, d=delete $this->attachPermissionsToAdminRoles([ - $this->createModuleSettingPermission('offline-payments', 'read'), - $this->createModuleSettingPermission('offline-payments', 'update'), - $this->createModuleSettingPermission('offline-payments', 'delete'), + $this->alias . '-settings' => 'r,u,d', ]); } } From 026b6494110c7a30f02023042f9a4871f148b818 Mon Sep 17 00:00:00 2001 From: denisdulici Date: Fri, 3 Apr 2020 14:36:32 +0300 Subject: [PATCH 3/3] added event and listener stubs --- app/Console/Stubs/Modules/json.stub | 1 + .../Stubs/Modules/listeners/install.stub | 36 +++++++++++++++++++ .../Stubs/Modules/providers/event.stub | 20 +++++++++++ app/Console/Stubs/Modules/routes/admin.stub | 2 +- app/Console/Stubs/Modules/routes/portal.stub | 2 +- config/module.php | 8 +++-- modules/OfflinePayments/Providers/Event.php | 4 +-- 7 files changed, 67 insertions(+), 6 deletions(-) create mode 100644 app/Console/Stubs/Modules/listeners/install.stub create mode 100644 app/Console/Stubs/Modules/providers/event.stub diff --git a/app/Console/Stubs/Modules/json.stub b/app/Console/Stubs/Modules/json.stub index 4e6177558..ced9ddb44 100644 --- a/app/Console/Stubs/Modules/json.stub +++ b/app/Console/Stubs/Modules/json.stub @@ -5,6 +5,7 @@ "category": "accounting", "active": 1, "providers": [ + "$MODULE_NAMESPACE$\\$STUDLY_NAME$\\Providers\\Event", "$MODULE_NAMESPACE$\\$STUDLY_NAME$\\Providers\\Main" ], "aliases": {}, diff --git a/app/Console/Stubs/Modules/listeners/install.stub b/app/Console/Stubs/Modules/listeners/install.stub new file mode 100644 index 000000000..a7276dd59 --- /dev/null +++ b/app/Console/Stubs/Modules/listeners/install.stub @@ -0,0 +1,36 @@ +alias != $this->alias) { + return; + } + + $this->updatePermissions(); + } + + protected function updatePermissions() + { + // c=create, r=read, u=update, d=delete + $this->attachPermissionsToAdminRoles([ + $this->alias . '-main' => 'c,r,u,d', + ]); + } +} diff --git a/app/Console/Stubs/Modules/providers/event.stub b/app/Console/Stubs/Modules/providers/event.stub new file mode 100644 index 000000000..351f46e75 --- /dev/null +++ b/app/Console/Stubs/Modules/providers/event.stub @@ -0,0 +1,20 @@ + [ + InstallModule::class, + ], + ]; +} diff --git a/app/Console/Stubs/Modules/routes/admin.stub b/app/Console/Stubs/Modules/routes/admin.stub index f272c31f6..2958c30b5 100644 --- a/app/Console/Stubs/Modules/routes/admin.stub +++ b/app/Console/Stubs/Modules/routes/admin.stub @@ -4,7 +4,7 @@ use Illuminate\Support\Facades\Route; Route::group([ 'middleware' => 'admin', - 'namespace' => 'Modules\$STUDLY_NAME$\Http\Controllers' + 'namespace' => '$MODULE_NAMESPACE$\$STUDLY_NAME$\Http\Controllers' ], function () { Route::prefix('$ALIAS$')->group(function() { // Route::get('/', 'Main@index'); diff --git a/app/Console/Stubs/Modules/routes/portal.stub b/app/Console/Stubs/Modules/routes/portal.stub index 8255ef6cd..238ebe11c 100644 --- a/app/Console/Stubs/Modules/routes/portal.stub +++ b/app/Console/Stubs/Modules/routes/portal.stub @@ -5,7 +5,7 @@ use Illuminate\Support\Facades\Route; Route::group([ 'prefix' => 'portal', 'middleware' => 'portal', - 'namespace' => 'Modules\$STUDLY_NAME$\Http\Controllers' + 'namespace' => '$MODULE_NAMESPACE$\$STUDLY_NAME$\Http\Controllers' ], function () { // Route::get('invoices/{invoice}/$ALIAS$', 'Main@show')->name('portal.invoices.$ALIAS$.show'); // Route::post('invoices/{invoice}/$ALIAS$/confirm', 'Main@confirm')->name('portal.invoices.$ALIAS$.confirm'); diff --git a/config/module.php b/config/module.php index 26c54b946..f822699ce 100644 --- a/config/module.php +++ b/config/module.php @@ -24,6 +24,8 @@ return [ 'enabled' => true, 'path' => base_path() . '/app/Console/Stubs/Modules', 'files' => [ + 'listeners/install' => 'Listeners/InstallModule.php', + 'providers/event' => 'Providers/Event.php', 'routes/admin' => 'Routes/admin.php', 'routes/portal' => 'Routes/portal.php', 'lang/general' => 'Resources/lang/en-GB/general.php', @@ -35,8 +37,10 @@ return [ 'package' => 'package.json', ], 'replacements' => [ - 'routes/admin' => ['ALIAS', 'STUDLY_NAME'], - 'routes/portal' => ['ALIAS', 'STUDLY_NAME'], + 'listeners/install' => ['ALIAS', 'STUDLY_NAME', 'MODULE_NAMESPACE'], + 'providers/event' => ['ALIAS', 'STUDLY_NAME', 'MODULE_NAMESPACE'], + 'routes/admin' => ['ALIAS', 'STUDLY_NAME', 'MODULE_NAMESPACE'], + 'routes/portal' => ['ALIAS', 'STUDLY_NAME', 'MODULE_NAMESPACE'], 'webpack' => ['ALIAS'], 'json' => ['ALIAS', 'STUDLY_NAME', 'MODULE_NAMESPACE'], 'lang/general' => ['ALIAS', 'STUDLY_NAME'], diff --git a/modules/OfflinePayments/Providers/Event.php b/modules/OfflinePayments/Providers/Event.php index ef2dce2d9..81c49182b 100644 --- a/modules/OfflinePayments/Providers/Event.php +++ b/modules/OfflinePayments/Providers/Event.php @@ -2,12 +2,12 @@ namespace Modules\OfflinePayments\Providers; -use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; +use Illuminate\Foundation\Support\Providers\EventServiceProvider as Provider; use Modules\OfflinePayments\Listeners\InstallModule; use Modules\OfflinePayments\Listeners\ShowPaymentMethod; use Modules\OfflinePayments\Listeners\ShowSetting; -class Event extends ServiceProvider +class Event extends Provider { /** * The event listener mappings for the module.