/** * Método para obtener los submenús de cada menú según el perfil */ public function getListadoSubmenuPorPerfil($entorno, $perfil, $menu) { $columns = 'menu.*'; $join = 'LEFT JOIN recurso ON recurso.id = menu.recurso_id '; $join .= 'LEFT JOIN recurso_perfil ON recurso.id = recurso_perfil.recurso_id '; $conditions = "menu.menu_id = {$menu} AND menu.visibilidad = {$entorno} AND menu.activo = " . self::ACTIVO; //Verifico si el perfil tiene el comodín $recurso = new RecursoPerfil(); if ($recurso->count("recurso_id = " . Recurso::COMODIN . " AND perfil_id= {$perfil}")) { $perfil = NULL; //Para que liste todos los submenús } $conditions .= (empty($perfil) or $perfil == Perfil::SUPER_USUARIO) ? '' : " AND recurso_perfil.perfil_id = {$perfil}"; $group = 'menu.id'; $order = 'menu.posicion ASC'; return $this->find("columns: {$columns}", "join: {$join}", "conditions: {$conditions}", "group: {$group}", "order: {$order}"); }
/** * Método para listar */ public function listar($order = 'order.modulo.asc') { if (Input::hasPost('privilegios') or Input::hasPost('old_privilegios')) { if (RecursoPerfil::setRecursoPerfil(Input::post('privilegios'), Input::post('old_privilegios'))) { Flash::valid('Los privilegios se han registrado correctamente!'); Input::delete('privilegios'); //Para que no queden persistentes Input::delete('old_privilegios'); } } $recurso = new Recurso(); $this->recursos = $recurso->getListadoRecursoPorModulo(Recurso::ACTIVO); $perfil = new Perfil(); $this->perfiles = $perfil->getListadoPerfil(Perfil::ACTIVO); $privilegio = new RecursoPerfil(); $this->privilegios = $privilegio->getPrivilegiosToArray(); $this->order = $order; $this->page_title = 'Permisos y privilegios de usuarios'; }
/** * Método para registrar los privilegios a los perfiles */ public static function setRecursoPerfil($privilegios, $old_privilegios = NULL) { $obj = new RecursoPerfil(); $obj->begin(); //Elimino los antiguos privilegios if (!empty($old_privilegios)) { $items = explode(',', $old_privilegios); foreach ($items as $value) { $data = explode('-', $value); //el formato es 1-4 = recurso-rol if ($data[0] != Recurso::DASHBOARD && $data[0] != Recurso::MI_CUENTA) { //Para que no elimine el principal y mi cuenta if (!$obj->delete("recurso_id = {$data['0']} AND perfil_id = {$data['1']}")) { $obj->rollback(); return FALSE; } } } } if (!empty($privilegios)) { foreach ($privilegios as $value) { $data = explode('-', $value); //el formato es 1-4 = recurso_id-perfil_id $obj->recurso_id = $data[0]; $obj->perfil_id = $data[1]; if ($obj->exists("recurso_id={$obj->recurso_id} AND perfil_id={$obj->perfil_id}")) { continue; } if (!$obj->create()) { $obj->rollback(); return FALSE; } } } $obj->commit(); return TRUE; }
/** * Callback que se ejecuta después de guardar/modificar un perfil */ protected function after_save() { $data = array(); $data[] = Recurso::DASHBOARD . '-' . $this->id; if (!RecursoPerfil::setRecursoPerfil($data)) { Flash::info("No se ha podido establcer el recurso 'dashboard' preestablecido al perfil."); return 'cancel'; } $data = array(); $data[] = Recurso::MI_CUENTA . '-' . $this->id; if (!RecursoPerfil::setRecursoPerfil($data)) { Flash::info("No se ha podido establcer el recurso 'Mi Cuenta' preestablecido al perfil."); return 'cancel'; } }
/** * Callback que se ejecuta después de guardar/modificar un perfil */ protected function after_save() { $data = array(); $data[] = Recurso::DASHBOARD . '-' . $this->id; RecursoPerfil::setRecursoPerfil($data); $data = array(); $data[] = Recurso::MI_CUENTA . '-' . $this->id; RecursoPerfil::setRecursoPerfil($data); }