diff --git a/ci4/app/Controllers/Facturacion/Facturas.php b/ci4/app/Controllers/Facturacion/Facturas.php index e98e4014..5ad8b387 100755 --- a/ci4/app/Controllers/Facturacion/Facturas.php +++ b/ci4/app/Controllers/Facturacion/Facturas.php @@ -63,7 +63,7 @@ class Facturas extends \App\Controllers\BaseResourceController public function list() { - checkPermission('facturas.menu'); + checkGroups(['admin', 'cliente-admin', 'cliente-editor', 'contabilidad']); $viewData = [ 'currentModule' => static::$controllerSlug, 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/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 5904b16c..32b156e0 100644 --- a/ci4/app/Views/themes/vuexy/main/menus/facturacion_menu.php +++ b/ci4/app/Views/themes/vuexy/main/menus/facturacion_menu.php @@ -19,7 +19,7 @@ if (auth()->user()->can('facturas.menu')) {