module permissions for reports/settings/widgets

This commit is contained in:
denisdulici 2020-01-06 14:42:14 +03:00
parent 85a80e6e64
commit d8dacd5838
13 changed files with 129 additions and 65 deletions

View File

@ -8,6 +8,20 @@ use App\Http\Requests\Setting\Module as Request;
class Modules extends Controller class Modules extends Controller
{ {
/**
* Instantiate a new controller instance.
*/
public function __construct()
{
$alias = request()->segment(1);
// Add CRUD permission check
$this->middleware('permission:create-' . $alias . '-settings')->only(['create', 'store', 'duplicate', 'import']);
$this->middleware('permission:read-' . $alias . '-settings')->only(['index', 'show', 'edit', 'export']);
$this->middleware('permission:update-' . $alias . '-settings')->only(['update', 'enable', 'disable']);
$this->middleware('permission:delete-' . $alias . '-settings')->only('destroy');
}
/** /**
* Show the form for editing the specified resource. * Show the form for editing the specified resource.
* *

View File

@ -43,14 +43,24 @@ class Settings extends Controller
$modules->settings[$m->getAlias()] = [ $modules->settings[$m->getAlias()] = [
'name' => $m->getName(), 'name' => $m->getName(),
'description' => $m->getDescription(), 'description' => $m->getDescription(),
'url' => 'settings/' . $m->getAlias(), 'url' => $m->getAlias() . '/settings',
'icon' => $m->get('icon', 'fa fa-cog'), 'icon' => $m->get('icon', 'fa fa-cog'),
]; ];
} }
event(new \App\Events\Module\SettingShowing($modules)); event(new \App\Events\Module\SettingShowing($modules));
return view('settings.settings.index', ['modules' => $modules->settings]); $settings = [];
foreach ($modules->settings as $alias => $setting) {
if (!user()->can('read-' . $alias . '-settings')) {
continue;
}
$settings[$alias] = $setting;
}
return view('settings.settings.index', ['modules' => $settings]);
} }
/** /**

View File

@ -699,6 +699,8 @@ class Version200 extends Listener
'common-search' => 'r', 'common-search' => 'r',
'common-widgets' => 'c,r,u,d', 'common-widgets' => 'c,r,u,d',
'modules-api-key' => 'c,u', 'modules-api-key' => 'c,u',
'offline-payments-settings' => 'r,u,d',
'paypal-standard-settings' => 'r,u',
'settings-appearance' => 'r,u', 'settings-appearance' => 'r,u',
'settings-company' => 'r', 'settings-company' => 'r',
'settings-defaults' => 'r', 'settings-defaults' => 'r',
@ -721,6 +723,8 @@ class Version200 extends Listener
'common-reports' => 'c,r,u,d', 'common-reports' => 'c,r,u,d',
'common-search' => 'r', 'common-search' => 'r',
'common-widgets' => 'r', 'common-widgets' => 'r',
'offline-payments-settings' => 'r,u,d',
'paypal-standard-settings' => 'r,u',
'settings-company' => 'r', 'settings-company' => 'r',
'settings-defaults' => 'r', 'settings-defaults' => 'r',
'settings-email' => 'r', 'settings-email' => 'r',

View File

@ -95,9 +95,20 @@ class Reports
public static function getPermission($class) public static function getPermission($class)
{ {
$class_name = (new \ReflectionClass($class))->getShortName(); $arr = explode('\\', $class);
$permission = 'read-reports-' . Str::kebab($class_name); $prefix = 'read-';
// Add module
if (strtolower($arr[0]) == 'modules') {
$prefix .= Str::kebab($arr[1]) . '-';
}
$prefix .= 'reports-';
$class_name = end($arr);
$permission = $prefix . Str::kebab($class_name);
return $permission; return $permission;
} }

View File

@ -76,9 +76,20 @@ class Widgets
public static function getPermission($class) public static function getPermission($class)
{ {
$class_name = (new \ReflectionClass($class))->getShortName(); $arr = explode('\\', $class);
$permission = 'read-widgets-' . Str::kebab($class_name); $prefix = 'read-';
// Add module
if (strtolower($arr[0]) == 'modules') {
$prefix .= Str::kebab($arr[1]) . '-';
}
$prefix .= 'widgets-';
$class_name = end($arr);
$permission = $prefix . Str::kebab($class_name);
return $permission; return $permission;
} }

View File

@ -58,6 +58,8 @@ class Roles extends Seeder
'modules-my' => 'r', 'modules-my' => 'r',
'modules-tiles' => 'r', 'modules-tiles' => 'r',
'notifications' => 'r,u', 'notifications' => 'r,u',
'offline-payments-settings' => 'r,u,d',
'paypal-standard-settings' => 'r,u',
'reports-expense-summary' => 'r', 'reports-expense-summary' => 'r',
'reports-income-summary' => 'r', 'reports-income-summary' => 'r',
'reports-income-expense-summary' => 'r', 'reports-income-expense-summary' => 'r',
@ -112,6 +114,8 @@ class Roles extends Seeder
'sales-revenues' => 'c,r,u,d', 'sales-revenues' => 'c,r,u,d',
'install-updates' => 'r,u', 'install-updates' => 'r,u',
'notifications' => 'r,u', 'notifications' => 'r,u',
'offline-payments-settings' => 'r,u,d',
'paypal-standard-settings' => 'r,u',
'reports-expense-summary' => 'r', 'reports-expense-summary' => 'r',
'reports-income-summary' => 'r', 'reports-income-summary' => 'r',
'reports-income-expense-summary' => 'r', 'reports-income-expense-summary' => 'r',

View File

@ -2,16 +2,15 @@
namespace Modules\OfflinePayments\Http\Controllers; namespace Modules\OfflinePayments\Http\Controllers;
use App\Abstracts\Http\Controller;
use Artisan; use Artisan;
use Illuminate\Http\Response; use Illuminate\Http\Response;
use Illuminate\Routing\Controller;
use Modules\OfflinePayments\Http\Requests\Setting as Request; use Modules\OfflinePayments\Http\Requests\Setting as Request;
use Modules\OfflinePayments\Http\Requests\SettingGet as GRequest; use Modules\OfflinePayments\Http\Requests\SettingGet as GRequest;
use Modules\OfflinePayments\Http\Requests\SettingDelete as DRequest; use Modules\OfflinePayments\Http\Requests\SettingDelete as DRequest;
class Settings extends Controller class Settings extends Controller
{ {
/** /**
* Show the form for editing the specified resource. * Show the form for editing the specified resource.
* *

View File

@ -17,7 +17,7 @@ class ShowSetting
$event->modules->settings['offline-payments'] = [ $event->modules->settings['offline-payments'] = [
'name' => trans('offline-payments::general.name'), 'name' => trans('offline-payments::general.name'),
'description' => trans('offline-payments::general.description'), 'description' => trans('offline-payments::general.description'),
'url' => 'settings/offline-payments', 'url' => 'offline-payments/settings',
'icon' => 'fas fa-credit-card', 'icon' => 'fas fa-credit-card',
]; ];
} }

View File

@ -39,7 +39,7 @@
<div class="card-footer"> <div class="card-footer">
<div class="row float-right"> <div class="row float-right">
{{ Form::saveButtons('settings/offline-payments') }} {{ Form::saveButtons('offline-payments/settings') }}
</div> </div>
</div> </div>
{!! Form::close() !!} {!! Form::close() !!}

View File

@ -4,10 +4,10 @@ Route::group([
'middleware' => 'admin', 'middleware' => 'admin',
'namespace' => 'Modules\OfflinePayments\Http\Controllers' 'namespace' => 'Modules\OfflinePayments\Http\Controllers'
], function () { ], function () {
Route::group(['prefix' => 'settings'], function () { Route::group(['prefix' => 'offline-payments/settings'], function () {
Route::get('offline-payments', 'Settings@edit')->name('offline-payments.edit'); Route::get('/', 'Settings@edit')->name('offline-payments.edit');
Route::post('offline-payments', 'Settings@update')->name('offline-payments.update'); Route::post('/', 'Settings@update')->name('offline-payments.update');
Route::post('offline-payments/get', 'Settings@get')->name('offline-payments.get'); Route::post('get', 'Settings@get')->name('offline-payments.get');
Route::delete('offline-payments/delete', 'Settings@destroy')->name('offline-payments.delete'); Route::delete('delete', 'Settings@destroy')->name('offline-payments.delete');
}); });
}); });

View File

@ -7,7 +7,7 @@
{!! Form::model($setting, [ {!! Form::model($setting, [
'id' => 'module', 'id' => 'module',
'method' => 'PATCH', 'method' => 'PATCH',
'url' => ['settings/' . $module->getAlias()], 'url' => [$module->getAlias() . '/settings'],
'@submit.prevent' => 'onSubmit', '@submit.prevent' => 'onSubmit',
'@keydown' => 'form.errors.clear($event.target.name)', '@keydown' => 'form.errors.clear($event.target.name)',
'files' => true, 'files' => true,
@ -40,13 +40,16 @@
</div> </div>
</div> </div>
@permission('update-' . $module->getAlias() . '-settings')
<div class="card-footer"> <div class="card-footer">
<div class="float-right"> <div class="float-right">
<div class="row"> <div class="row">
{{ Form::saveButtons(URL::previous()) }} {{ Form::saveButtons(url()->previous()) }}
</div> </div>
</div> </div>
</div> </div>
@endpermission
{!! Form::close() !!} {!! Form::close() !!}
</div> </div>
@endsection @endsection

View File

@ -126,6 +126,7 @@
</div> </div>
@endpermission @endpermission
@permission('read-settings-categories')
<div class="col-md-4"> <div class="col-md-4">
<a href="{{ route('categories.index') }}"> <a href="{{ route('categories.index') }}">
<button type="button" class="btn-icon-clipboard p-2"> <button type="button" class="btn-icon-clipboard p-2">
@ -143,7 +144,9 @@
</button> </button>
</a> </a>
</div> </div>
@endpermission
@permission('read-settings-currencies')
<div class="col-md-4"> <div class="col-md-4">
<a href="{{ route('currencies.index') }}"> <a href="{{ route('currencies.index') }}">
<button type="button" class="btn-icon-clipboard p-2"> <button type="button" class="btn-icon-clipboard p-2">
@ -161,7 +164,9 @@
</button> </button>
</a> </a>
</div> </div>
@endpermission
@permission('read-settings-taxes')
<div class="col-md-4"> <div class="col-md-4">
<a href="{{ route('taxes.index') }}"> <a href="{{ route('taxes.index') }}">
<button type="button" class="btn-icon-clipboard p-2"> <button type="button" class="btn-icon-clipboard p-2">
@ -179,6 +184,7 @@
</button> </button>
</a> </a>
</div> </div>
@endpermission
@foreach($modules as $module) @foreach($modules as $module)
<div class="col-md-4"> <div class="col-md-4">

View File

@ -148,12 +148,14 @@ Route::group(['prefix' => 'settings'], function () {
Route::get('email', 'Settings\Email@edit')->name('email.edit'); Route::get('email', 'Settings\Email@edit')->name('email.edit');
Route::patch('email', 'Settings\Email@update')->name('email.update'); Route::patch('email', 'Settings\Email@update')->name('email.update');
Route::get('schedule', 'Settings\Schedule@edit')->name('schedule.edit'); Route::get('schedule', 'Settings\Schedule@edit')->name('schedule.edit');
Route::get('{alias}', 'Settings\Modules@edit');
Route::patch('{alias}', 'Settings\Modules@update');
}); });
}); });
Route::group(['as' => 'settings.'], function () {
Route::get('{alias}/settings', 'Settings\Modules@edit');
Route::patch('{alias}/settings', 'Settings\Modules@update');
});
Route::group(['as' => 'apps.', 'prefix' => 'apps'], function () { Route::group(['as' => 'apps.', 'prefix' => 'apps'], function () {
Route::resource('api-key', 'Modules\ApiKey'); Route::resource('api-key', 'Modules\ApiKey');