Merge pull request #1392 from denisdulici/master
Improved permission attachment for modules
This commit is contained in:
commit
69c7109ba8
@ -5,6 +5,7 @@
|
||||
"category": "accounting",
|
||||
"active": 1,
|
||||
"providers": [
|
||||
"$MODULE_NAMESPACE$\\$STUDLY_NAME$\\Providers\\Event",
|
||||
"$MODULE_NAMESPACE$\\$STUDLY_NAME$\\Providers\\Main"
|
||||
],
|
||||
"aliases": {},
|
||||
|
36
app/Console/Stubs/Modules/listeners/install.stub
Normal file
36
app/Console/Stubs/Modules/listeners/install.stub
Normal file
@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace $MODULE_NAMESPACE$\$STUDLY_NAME$\Listeners;
|
||||
|
||||
use App\Events\Module\Installed as Event;
|
||||
use App\Traits\Permissions;
|
||||
|
||||
class InstallModule
|
||||
{
|
||||
use Permissions;
|
||||
|
||||
public $alias = '$ALIAS$';
|
||||
|
||||
/**
|
||||
* Handle the event.
|
||||
*
|
||||
* @param Event $event
|
||||
* @return void
|
||||
*/
|
||||
public function handle(Event $event)
|
||||
{
|
||||
if ($event->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',
|
||||
]);
|
||||
}
|
||||
}
|
20
app/Console/Stubs/Modules/providers/event.stub
Normal file
20
app/Console/Stubs/Modules/providers/event.stub
Normal file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace $MODULE_NAMESPACE$\$STUDLY_NAME$\Providers;
|
||||
|
||||
use Illuminate\Foundation\Support\Providers\EventServiceProvider as Provider;
|
||||
use $MODULE_NAMESPACE$\$STUDLY_NAME$\Listeners\InstallModule;
|
||||
|
||||
class Event extends Provider
|
||||
{
|
||||
/**
|
||||
* The event listener mappings for the module.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $listen = [
|
||||
\App\Events\Module\Installed::class => [
|
||||
InstallModule::class,
|
||||
],
|
||||
];
|
||||
}
|
@ -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');
|
||||
|
@ -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');
|
||||
|
@ -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;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -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'],
|
||||
|
@ -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([
|
||||
|
@ -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()
|
||||
{
|
||||
$this->attachPermissionsToAllRoles([
|
||||
$this->createModuleSettingPermission('offline-payments', 'read'),
|
||||
$this->createModuleSettingPermission('offline-payments', 'update'),
|
||||
$this->createModuleSettingPermission('offline-payments', 'delete'),
|
||||
// c=create, r=read, u=update, d=delete
|
||||
$this->attachPermissionsToAdminRoles([
|
||||
$this->alias . '-settings' => 'r,u,d',
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
@ -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.
|
||||
|
Loading…
x
Reference in New Issue
Block a user