diff --git a/ci4/app/Controllers/Compras/Proveedores.php b/ci4/app/Controllers/Compras/Proveedores.php index 0ac9be3e..cca3fe73 100755 --- a/ci4/app/Controllers/Compras/Proveedores.php +++ b/ci4/app/Controllers/Compras/Proveedores.php @@ -50,6 +50,8 @@ class Proveedores extends \App\Controllers\BaseResourceController { public function index() { + + checkPermission('proveedores.menu'); $viewData = [ 'currentModule' => static::$controllerSlug, @@ -67,9 +69,7 @@ class Proveedores extends \App\Controllers\BaseResourceController { public function add() { - - - + checkPermission('proveedores.create'); if ($this->request->getPost()) : @@ -138,6 +138,8 @@ class Proveedores extends \App\Controllers\BaseResourceController { } // end function add() public function edit($requestedId = null) { + + checkPermission('proveedores.edit'); if ($requestedId == null) : return $this->redirect2listView(); diff --git a/ci4/app/Controllers/Facturacion/Facturas.php b/ci4/app/Controllers/Facturacion/Facturas.php index c6ed2ae1..5ad8b387 100755 --- a/ci4/app/Controllers/Facturacion/Facturas.php +++ b/ci4/app/Controllers/Facturacion/Facturas.php @@ -41,6 +41,7 @@ class Facturas extends \App\Controllers\BaseResourceController public function index() { + checkPermission('facturas.menu'); if (auth()->user()->inGroup('cliente-admin') || auth()->user()->inGroup('cliente-editor')) { // Se obtiene el cliente ID a partir del usuario de la sesion @@ -62,6 +63,7 @@ class Facturas extends \App\Controllers\BaseResourceController public function list() { + checkGroups(['admin', 'cliente-admin', 'cliente-editor', 'contabilidad']); $viewData = [ 'currentModule' => static::$controllerSlug, @@ -103,8 +105,8 @@ class Facturas extends \App\Controllers\BaseResourceController public function add() { - if(!auth()->user()->can('facturas.create')) - return $this->failForbidden(lang('Basic.global.noPermission'), 403); + checkPermission('facturas.create'); + if ($this->request->getPost()): $nullIfEmpty = true; // !(phpversion() >= '8.1'); @@ -202,9 +204,7 @@ class Facturas extends \App\Controllers\BaseResourceController public function edit($id = null) { - - if(!auth()->user()->can('facturas.edit')) - return $this->failForbidden(lang('Basic.global.noPermission'), 403); + checkPermission('facturas.edit'); if ($id == null): return $this->redirect2listView(); diff --git a/ci4/app/Controllers/Sistema/Actividad.php b/ci4/app/Controllers/Sistema/Actividad.php index 263bd8dd..290fb8b9 100644 --- a/ci4/app/Controllers/Sistema/Actividad.php +++ b/ci4/app/Controllers/Sistema/Actividad.php @@ -35,6 +35,7 @@ class Actividad extends BaseResourceController public function index() { + checkPermission('actividad.menu'); $viewData = [ diff --git a/ci4/app/Controllers/Sistema/Ajustes.php b/ci4/app/Controllers/Sistema/Ajustes.php index 9165bf0e..a610783f 100644 --- a/ci4/app/Controllers/Sistema/Ajustes.php +++ b/ci4/app/Controllers/Sistema/Ajustes.php @@ -40,6 +40,7 @@ class Ajustes extends BaseResourceController public function settings() { + checkPermission('ajustes.menu'); $id = 1; $settingsEntity = $this->model->find($id); diff --git a/ci4/app/Controllers/Soporte/Ticketcontroller.php b/ci4/app/Controllers/Soporte/Ticketcontroller.php index 51ed1a70..af12bef5 100644 --- a/ci4/app/Controllers/Soporte/Ticketcontroller.php +++ b/ci4/app/Controllers/Soporte/Ticketcontroller.php @@ -44,7 +44,7 @@ class Ticketcontroller extends \App\Controllers\BaseResourceController public function index() { - //checkPermission('tickets.menu'); + checkPermission('tickets.menu'); $viewData = [ 'currentModule' => static::$controllerSlug, @@ -69,7 +69,7 @@ class Ticketcontroller extends \App\Controllers\BaseResourceController public function add() { - //checkPermission('tickets.create', $this->indexRoute); + checkPermission('tickets.create'); if ($this->request->getPost()): @@ -145,6 +145,9 @@ class Ticketcontroller extends \App\Controllers\BaseResourceController public function edit($requestedId = null) { + + checkPermission('tickets.edit'); + $modelRespuesta = new \App\Models\Soporte\TicketRespuestaModel(); if ($requestedId == null): diff --git a/ci4/app/Helpers/rbac_helper.php b/ci4/app/Helpers/rbac_helper.php index 6eb65e33..422250a6 100644 --- a/ci4/app/Helpers/rbac_helper.php +++ b/ci4/app/Helpers/rbac_helper.php @@ -120,3 +120,37 @@ if (!function_exists('checkPermission')) { } } +if (!function_exists('checkGroups')) { + /** + * Verifica si el usuario pertenece a alguno de los grupos especificados. + * + * @param array $groups Lista de grupos permitidos. + * @param string|null $redirectRoute Ruta de redirección si no pertenece a ningún grupo. + * @return \CodeIgniter\HTTP\RedirectResponse|null + */ + function checkGroups(array $groups, string $redirectRoute = null) + { + $session = \Config\Services::session(); + $response = \Config\Services::response(); + $auth = auth(); // Shield auth service + + $user = $auth->user(); + + $inGroup = false; + foreach ($groups as $group) { + if ($user->inGroup($group)) { + $inGroup = true; + break; + } + } + + if (!$inGroup) { + $session->setFlashdata('errorMessage', 'No tiene permisos de acceso.'); + $route = $redirectRoute ?? 'home'; + return $response->redirect(route_to($route)); + } + + return null; + } +} + diff --git a/ci4/app/Views/themes/vuexy/main/menus/compras_menu.php b/ci4/app/Views/themes/vuexy/main/menus/compras_menu.php index 8af7bd89..cc2dd5e8 100644 --- a/ci4/app/Views/themes/vuexy/main/menus/compras_menu.php +++ b/ci4/app/Views/themes/vuexy/main/menus/compras_menu.php @@ -2,35 +2,45 @@ /** * MENU COMPRAS */ -if (auth()->user()->inGroup('beta')) { -?> - - - +if ( + auth()->user()->can('proveedores.menu') || + auth()->user()->inGroup('beta') +) { + + ?> + + + \ No newline at end of file diff --git a/ci4/app/Views/themes/vuexy/main/menus/configuracion_menu.php b/ci4/app/Views/themes/vuexy/main/menus/configuracion_menu.php index 5a3621f9..169ae9c3 100644 --- a/ci4/app/Views/themes/vuexy/main/menus/configuracion_menu.php +++ b/ci4/app/Views/themes/vuexy/main/menus/configuracion_menu.php @@ -6,127 +6,127 @@ if ( auth()->user()->can('paises.menu') || auth()->user()->can('formas-pago.menu') || - auth()->user()->can('papel-genericosk .menu') || + auth()->user()->can('papel-generico.menu') || auth()->user()->can('papel-impresion.menu') || auth()->user()->can('maquinas.menu') || auth()->user()->can('maquinas-defecto.menu') || auth()->user()->can('usuarios.menu') || auth()->user()->can('roles-permisos.menu') ) { -?> - \ No newline at end of file diff --git a/ci4/app/Views/themes/vuexy/main/menus/facturacion_cliente_menu.php b/ci4/app/Views/themes/vuexy/main/menus/facturacion_cliente_menu.php index 52553898..94f0f2f5 100644 --- a/ci4/app/Views/themes/vuexy/main/menus/facturacion_cliente_menu.php +++ b/ci4/app/Views/themes/vuexy/main/menus/facturacion_cliente_menu.php @@ -12,15 +12,10 @@ if (auth()->user()->inGroup('cliente-admin') || auth()->user()->inGroup('cliente \ No newline at end of file diff --git a/ci4/app/Views/themes/vuexy/main/menus/facturacion_menu.php b/ci4/app/Views/themes/vuexy/main/menus/facturacion_menu.php index c05d2aa7..32b156e0 100644 --- a/ci4/app/Views/themes/vuexy/main/menus/facturacion_menu.php +++ b/ci4/app/Views/themes/vuexy/main/menus/facturacion_menu.php @@ -2,39 +2,34 @@ /** * MENU FACTURACION */ -if (auth()->user()->inGroup('beta') || auth()->user()->can('facturas.menu')) { +if (auth()->user()->can('facturas.menu')) { ?> - + \ No newline at end of file diff --git a/ci4/app/Views/themes/vuexy/main/menus/mensajes_menu.php b/ci4/app/Views/themes/vuexy/main/menus/mensajes_menu.php index 823edf87..9899107b 100644 --- a/ci4/app/Views/themes/vuexy/main/menus/mensajes_menu.php +++ b/ci4/app/Views/themes/vuexy/main/menus/mensajes_menu.php @@ -4,7 +4,7 @@ */ if (!auth()->user()->inGroup('cliente-administrador','cliente')) { ?> - + + + \ No newline at end of file