Error al editar una capa postgis sobre la que no se tienen permisos de escritura

6 messages Options
Embed this post
Permalink
Javier Estévez-2

Error al editar una capa postgis sobre la que no se tienen permisos de escritura

Reply Threaded More More options
Print post
Permalink
Hola.

En gvSIG 1.9 RC2, build 1250 (y en versiones anteriores, ya que lo hemos detectado también en la 1.1.2) no hay ningún impedimento a la hora de poner en edición una capa sobre la que no hay permisos de escritura (por ejemplo, en la que el usuario tiene tan sólo el privilegio SELECT). Esto conlleva a que cuando se quieren guardar los cambios de la capa el usuario se encuentra con un error y pierde la conexión a la BD.

Investigando en el código me he encontrado con que en el driver de PostGIS no comprueba si la capa es editable, simplemente devuelve siempre true en el método isWritable. Así que propongo los parches adjuntos para los archivos PostGISDriver y PostGISWriter para que se efectúen las comprobaciones necesarias.

Como una pequeña mejora a la situación actual, en la función canSaveEdits (PostGISWriter) se hace una consulta de privilegios sobre la tabla para comprobar si se tienen los privilegios INSERT, UPDATE y DELETE. Y en isWritable se llama a esta función.

Además también se propone otra consulta en canAlterTable (PostGISWriter) para comprobar si el usuario es dueño de la tabla o superusuario para saber así si tiene permisos de modificación de estructura de la tabla.

Espero que sirva de ayuda.
Un saludo.

--
Javier Estévez Valiñas
Grupo de Desarrollo
Cartolab - Laboratorio de Ingeniería Cartográfica
http://www.cartolab.es

ETS Ingeniería de Caminos, Canales y Puertos
Universidade da Coruña
Campus de Elviña - 15071 A Coruña (España)
(34)981167000 ext. 5493

[PostGisDriver.java.patch]

Index: .
===================================================================
--- . (revision 31485)
+++ . (working copy)
@@ -910,7 +910,7 @@
  }
 */
  public boolean isWritable() {
- return true;
+ return writer.canSaveEdits();
  }
 
  public IWriter getWriter() {


[PostGISWriter.java.patch]

Index: .
===================================================================
--- . (revision 31485)
+++ . (working copy)
@@ -283,13 +283,35 @@
  }
 
  public boolean canAlterTable() {
- return true;
+ try {
+            boolean can_alter = false;
+            st = ((ConnectionJDBC)conex).getConnection().createStatement();
+            String sql = "SELECT current_user=(SELECT tableowner from pg_tables WHERE schemaname = '" + lyrDef.getSchema() +
+             "' and tablename='" + lyrDef.getTableName() + "') OR (SELECT usesuper FROM pg_user WHERE usename=current_user) AS can_alter;";
+            ResultSet rs = st.executeQuery(sql);
+            if (rs.next()) {
+                can_alter = rs.getBoolean("can_alter");
+            }
+            return can_alter;
+ } catch (SQLException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ return false;
+ }
  }
 
  public boolean canSaveEdits() {
- // TODO: Revisar los permisos de la tabla en cuesti�n.
  try {
- return !((ConnectionJDBC)conex).getConnection().isReadOnly();
+            boolean can_edit = false;
+            st = ((ConnectionJDBC)conex).getConnection().createStatement();
+            String sql = "SELECT has_table_privilege('" + lyrDef.getComposedTableName() + "', 'insert') " +
+                    "AND has_table_privilege('" + lyrDef.getComposedTableName() + "', 'update') " +
+                    "AND has_table_privilege('" + lyrDef.getComposedTableName() + "', 'delete') as can_edit;";
+            ResultSet rs = st.executeQuery(sql);
+            if (rs.next()) {
+                can_edit = rs.getBoolean("can_edit");
+            }
+            return can_edit && !((ConnectionJDBC)conex).getConnection().isReadOnly();
  } catch (SQLException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();


_______________________________________________
gvSIG_desarrolladores mailing list
[hidden email]
http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
Manuel Castro

Re: Error al editar una capa postgis sobre la que no se tienen permisos de escritura

Reply Threaded More More options
Print post
Permalink
Hola Javier.
 
Me interesa saber como es que se instala los parches de postgis, ua que no tengo tanta experiencia en estos parches y si esta instalado en linux o en windows, ya que yo lo tengo instalado en Windows XP.
 
Atte.
Manuel Castro


 
El 4 de noviembre de 2009 04:37, Javier Estévez <[hidden email]> escribió:
Hola.

En gvSIG 1.9 RC2, build 1250 (y en versiones anteriores, ya que lo hemos detectado también en la 1.1.2) no hay ningún impedimento a la hora de poner en edición una capa sobre la que no hay permisos de escritura (por ejemplo, en la que el usuario tiene tan sólo el privilegio SELECT). Esto conlleva a que cuando se quieren guardar los cambios de la capa el usuario se encuentra con un error y pierde la conexión a la BD.

Investigando en el código me he encontrado con que en el driver de PostGIS no comprueba si la capa es editable, simplemente devuelve siempre true en el método isWritable. Así que propongo los parches adjuntos para los archivos PostGISDriver y PostGISWriter para que se efectúen las comprobaciones necesarias.

Como una pequeña mejora a la situación actual, en la función canSaveEdits (PostGISWriter) se hace una consulta de privilegios sobre la tabla para comprobar si se tienen los privilegios INSERT, UPDATE y DELETE. Y en isWritable se llama a esta función.

Además también se propone otra consulta en canAlterTable (PostGISWriter) para comprobar si el usuario es dueño de la tabla o superusuario para saber así si tiene permisos de modificación de estructura de la tabla.

Espero que sirva de ayuda.
Un saludo.

--
Javier Estévez Valiñas
Grupo de Desarrollo
Cartolab - Laboratorio de Ingeniería Cartográfica
http://www.cartolab.es

ETS Ingeniería de Caminos, Canales y Puertos
Universidade da Coruña
Campus de Elviña - 15071 A Coruña (España)
(34)981167000 ext. 5493

_______________________________________________
gvSIG_desarrolladores mailing list
[hidden email]
http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores



_______________________________________________
gvSIG_desarrolladores mailing list
[hidden email]
http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
Javier Estévez-2

Re: Error al editar una capa postgis sobre la que no se tienen permisos de escritura

Reply Threaded More More options
Print post
Permalink
Hola Manuel.

Estos parches son arreglos del código fuente y se deben aplicar sobre el mismo y no sobre el ejecutable de windows o de linux. Los envio a esta lista con el fin de que los desarrolladores de gvSIG puedan usarlos si lo creen conveniente, o que por lo menos registren el bug en su sistema  de incidencias.

Imagino que en el caso de que el parche sea aceptado, o se solucione el problema de otra forma, el arreglo aparecerá en siguientes versiones de la 1.9.

Un saludo.

El 4 de noviembre de 2009 18:16, Manuel Castro <[hidden email]> escribió:
Hola Javier.
 
Me interesa saber como es que se instala los parches de postgis, ua que no tengo tanta experiencia en estos parches y si esta instalado en linux o en windows, ya que yo lo tengo instalado en Windows XP.
 
Atte.
Manuel Castro


 
El 4 de noviembre de 2009 04:37, Javier Estévez <[hidden email]> escribió:
Hola.

En gvSIG 1.9 RC2, build 1250 (y en versiones anteriores, ya que lo hemos detectado también en la 1.1.2) no hay ningún impedimento a la hora de poner en edición una capa sobre la que no hay permisos de escritura (por ejemplo, en la que el usuario tiene tan sólo el privilegio SELECT). Esto conlleva a que cuando se quieren guardar los cambios de la capa el usuario se encuentra con un error y pierde la conexión a la BD.

Investigando en el código me he encontrado con que en el driver de PostGIS no comprueba si la capa es editable, simplemente devuelve siempre true en el método isWritable. Así que propongo los parches adjuntos para los archivos PostGISDriver y PostGISWriter para que se efectúen las comprobaciones necesarias.

Como una pequeña mejora a la situación actual, en la función canSaveEdits (PostGISWriter) se hace una consulta de privilegios sobre la tabla para comprobar si se tienen los privilegios INSERT, UPDATE y DELETE. Y en isWritable se llama a esta función.

Además también se propone otra consulta en canAlterTable (PostGISWriter) para comprobar si el usuario es dueño de la tabla o superusuario para saber así si tiene permisos de modificación de estructura de la tabla.

Espero que sirva de ayuda.
Un saludo.

--
Javier Estévez Valiñas
Grupo de Desarrollo
Cartolab - Laboratorio de Ingeniería Cartográfica
http://www.cartolab.es

ETS Ingeniería de Caminos, Canales y Puertos
Universidade da Coruña
Campus de Elviña - 15071 A Coruña (España)
(34)981167000 ext. 5493

_______________________________________________
gvSIG_desarrolladores mailing list
[hidden email]
http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores



_______________________________________________
gvSIG_desarrolladores mailing list
[hidden email]
http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores




--
Javier Estévez Valiñas
Grupo de Desarrollo
Cartolab - Laboratorio de Ingeniería Cartográfica
http://www.cartolab.es

ETS Ingeniería de Caminos, Canales y Puertos
Universidade da Coruña
Campus de Elviña - 15071 A Coruña (España)
(34)981167000 ext. 5493

_______________________________________________
gvSIG_desarrolladores mailing list
[hidden email]
http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
Manuel Castro

Re: Error al editar una capa postgis sobre la que no se tienen permisos de escritura

Reply Threaded More More options
Print post
Permalink
Gracias por su pronta atencion
 


 
El 4 de noviembre de 2009 11:32, Javier Estévez <[hidden email]> escribió:
Hola Manuel.

Estos parches son arreglos del código fuente y se deben aplicar sobre el mismo y no sobre el ejecutable de windows o de linux. Los envio a esta lista con el fin de que los desarrolladores de gvSIG puedan usarlos si lo creen conveniente, o que por lo menos registren el bug en su sistema  de incidencias.

Imagino que en el caso de que el parche sea aceptado, o se solucione el problema de otra forma, el arreglo aparecerá en siguientes versiones de la 1.9.

Un saludo.

El 4 de noviembre de 2009 18:16, Manuel Castro <[hidden email]> escribió:

Hola Javier.
 
Me interesa saber como es que se instala los parches de postgis, ua que no tengo tanta experiencia en estos parches y si esta instalado en linux o en windows, ya que yo lo tengo instalado en Windows XP.
 
Atte.
Manuel Castro


 
El 4 de noviembre de 2009 04:37, Javier Estévez <[hidden email]> escribió:
Hola.

En gvSIG 1.9 RC2, build 1250 (y en versiones anteriores, ya que lo hemos detectado también en la 1.1.2) no hay ningún impedimento a la hora de poner en edición una capa sobre la que no hay permisos de escritura (por ejemplo, en la que el usuario tiene tan sólo el privilegio SELECT). Esto conlleva a que cuando se quieren guardar los cambios de la capa el usuario se encuentra con un error y pierde la conexión a la BD.

Investigando en el código me he encontrado con que en el driver de PostGIS no comprueba si la capa es editable, simplemente devuelve siempre true en el método isWritable. Así que propongo los parches adjuntos para los archivos PostGISDriver y PostGISWriter para que se efectúen las comprobaciones necesarias.

Como una pequeña mejora a la situación actual, en la función canSaveEdits (PostGISWriter) se hace una consulta de privilegios sobre la tabla para comprobar si se tienen los privilegios INSERT, UPDATE y DELETE. Y en isWritable se llama a esta función.

Además también se propone otra consulta en canAlterTable (PostGISWriter) para comprobar si el usuario es dueño de la tabla o superusuario para saber así si tiene permisos de modificación de estructura de la tabla.

Espero que sirva de ayuda.
Un saludo.

--
Javier Estévez Valiñas
Grupo de Desarrollo
Cartolab - Laboratorio de Ingeniería Cartográfica
http://www.cartolab.es

ETS Ingeniería de Caminos, Canales y Puertos
Universidade da Coruña
Campus de Elviña - 15071 A Coruña (España)
(34)981167000 ext. 5493

_______________________________________________
gvSIG_desarrolladores mailing list
[hidden email]
http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores



_______________________________________________
gvSIG_desarrolladores mailing list
[hidden email]
http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores




--
Javier Estévez Valiñas
Grupo de Desarrollo
Cartolab - Laboratorio de Ingeniería Cartográfica
http://www.cartolab.es

ETS Ingeniería de Caminos, Canales y Puertos
Universidade da Coruña
Campus de Elviña - 15071 A Coruña (España)
(34)981167000 ext. 5493

_______________________________________________
gvSIG_desarrolladores mailing list
[hidden email]
http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores



_______________________________________________
gvSIG_desarrolladores mailing list
[hidden email]
http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
Francisco José Peñarrubia

Re: Error al editar una capa postgis sobre la que no se tienen permisos de escritura

Reply Threaded More More options
Print post
Permalink
In reply to this post by Javier Estévez-2
Hola Javier.

Ante todo, disculpa la tardanza en responder, y muchas gracias por el
código. Me parece un arreglo que viene muy bien, e intentaremos meterlo
en el SVN. El problema es que ahora mismo estamos intentando cerrar la
1.9, y cualquier cambio nos obliga a pasar la bateria de tests para
asegurarnos de que no hemos roto nada.... :-(

En cualquier caso, he mirado el parche, y yo creo que no rompería nada,
pero el proceso de estabilización final nos obliga a ser muy cuidadosos
con cualquier cambio (no depende de mí, la verdad).

También estoy mirando el parche que envió Pablo Xanxiao para hacer que
las configuraciones de usuario no se pisen si hay varios gvSIG
instalados. Mis disculpas también para él, y lo mismo, intentaremos
meter esto en el SVN para que se pueda testear una vez hallamos salido
con la versión estable.

Espero que nuestros errores y lentitudes no os hagan desesperar y podais
seguir contribuyendo parches al proyecto. Muchísimas gracias por vuestra
ayuda, y continuad así en el Cartolab :-).

También vamos a intentar que esto no pase en el futuro, y que podamos
agilizar estas ayudas.

Saludos.

Fran Peñarrubia
Equipo gvSIG.



Javier Estévez escribió:

> Hola.
>
> En gvSIG 1.9 RC2, build 1250 (y en versiones anteriores, ya que lo
> hemos detectado también en la 1.1.2) no hay ningún impedimento a la
> hora de poner en edición una capa sobre la que no hay permisos de
> escritura (por ejemplo, en la que el usuario tiene tan sólo el
> privilegio SELECT). Esto conlleva a que cuando se quieren guardar los
> cambios de la capa el usuario se encuentra con un error y pierde la
> conexión a la BD.
>
> Investigando en el código me he encontrado con que en el driver de
> PostGIS no comprueba si la capa es editable, simplemente devuelve
> siempre true en el método isWritable. Así que propongo los parches
> adjuntos para los archivos PostGISDriver y PostGISWriter para que se
> efectúen las comprobaciones necesarias.
>
> Como una pequeña mejora a la situación actual, en la función
> canSaveEdits (PostGISWriter) se hace una consulta de privilegios sobre
> la tabla para comprobar si se tienen los privilegios INSERT, UPDATE y
> DELETE. Y en isWritable se llama a esta función.
>
> Además también se propone otra consulta en canAlterTable
> (PostGISWriter) para comprobar si el usuario es dueño de la tabla o
> superusuario para saber así si tiene permisos de modificación de
> estructura de la tabla.
>
> Espero que sirva de ayuda.
> Un saludo.
>
> --
> Javier Estévez Valiñas
> Grupo de Desarrollo
> Cartolab - Laboratorio de Ingeniería Cartográfica
> http://www.cartolab.es
>
> ETS Ingeniería de Caminos, Canales y Puertos
> Universidade da Coruña
> Campus de Elviña - 15071 A Coruña (España)
> (34)981167000 ext. 5493
> ------------------------------------------------------------------------
>
> _______________________________________________
> gvSIG_desarrolladores mailing list
> [hidden email]
> http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores

_______________________________________________
gvSIG_desarrolladores mailing list
[hidden email]
http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
Javier Estévez-2

Re: Error al editar una capa postgis sobre la que no se tienen permisos de escritura

Reply Threaded More More options
Print post
Permalink
Hola Fran,

Comprendo la situación e imagino que estaréis apurando todo lo posible para poder lanzar la 1.9, esperemos que podáis solucionar ese tema en breve y a buen puerto. De todas formas a nosotros el parche nos resulta útil e importante, y por eso os lo hemos enviado, y no nos ha roto nada de momento ;-)
Espero que en algún momento pueda ser utilizado.

¡Mucho ánimo con el cierre de la 1.9!
Saludos.

2009/11/9 Francisco José Peñarrubia <[hidden email]>
Hola Javier.

Ante todo, disculpa la tardanza en responder, y muchas gracias por el
código. Me parece un arreglo que viene muy bien, e intentaremos meterlo
en el SVN. El problema es que ahora mismo estamos intentando cerrar la
1.9, y cualquier cambio nos obliga a pasar la bateria de tests para
asegurarnos de que no hemos roto nada.... :-(

En cualquier caso, he mirado el parche, y yo creo que no rompería nada,
pero el proceso de estabilización final nos obliga a ser muy cuidadosos
con cualquier cambio (no depende de mí, la verdad).

También estoy mirando el parche que envió Pablo Xanxiao para hacer que
las configuraciones de usuario no se pisen si hay varios gvSIG
instalados. Mis disculpas también para él, y lo mismo, intentaremos
meter esto en el SVN para que se pueda testear una vez hallamos salido
con la versión estable.

Espero que nuestros errores y lentitudes no os hagan desesperar y podais
seguir contribuyendo parches al proyecto. Muchísimas gracias por vuestra
ayuda, y continuad así en el Cartolab :-).

También vamos a intentar que esto no pase en el futuro, y que podamos
agilizar estas ayudas.

Saludos.

Fran Peñarrubia
Equipo gvSIG.




--
Javier Estévez Valiñas
Grupo de Desarrollo
Cartolab - Laboratorio de Ingeniería Cartográfica
http://www.cartolab.es

ETS Ingeniería de Caminos, Canales y Puertos
Universidade da Coruña
Campus de Elviña - 15071 A Coruña (España)
(34)981167000 ext. 5493

_______________________________________________
gvSIG_desarrolladores mailing list
[hidden email]
http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores