Ho un problemino che non e' che abbia particolare impatto, ma forse vi puo' servire ad evidenziare qualcosa di interesse generale.
Sto usando cmdbuild 2.1.2 (27/5/2013) con postgresql-9.1-901.jdbc4.jar, postgres 9.1.9 e tomcat 7.
Ho una classe astratta "Asset", sotto la quale ho diverse classi concrete ed una classe astratta "Server", sotto quest'ultima a sua volta ci sono altre classi concrete.
Se entro come admin non ho nessun problema ed in particolare se vado sulla classe Asset, vedo tutte le schede delle sottoclassi.
Se entro come un utente che ha i permessi di lettura e scrittura su tutte le classi, ma non e' admin, posso andare sulla tabella Server e su tutte le tabelle concrete senza problemi, ma se vado su Asset mi arriva un traceback. Non posso mettere qui tutto il SQL, ma il senso e' che nel SELECT ci sono i campi delle classi concrete, nel WHERE ci sono varie cose tra cui:
"Server"."IdClass" = ?
e statement simili per tutte le sottoclassi di Asset, e nel FROM non c'e' la tabella "Server" (ci sono invece tutti i left join tra Asset e le classi concrete).
Al gruppo ho dato i permessi di scrittura su tutte le classi, e non ho usato altri tipi piu' complicati di permessi per colonne o righe.
Ho provato a seguire il sorgente per trovare dov'e' che mette la sottoclasse astratta nella lista dei join, ma ne sono uscito sconfitto. Spero che questo resoconto vi possa essere utile in qualche modo.
Saluti,
Michele Bergonzoni
Call: services/json/management/modcard/getcardlist?_dc=1371550960472 --------------------------------------------------------------------- Error: org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar (omissis) nested exception is org.postgresql.util.PSQLException: ERROR: missing FROM-clause entry for table "Server" Position: 11333 at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:233) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:602) at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:636) at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:665) at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:685) at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:693) at org.cmdbuild.dao.driver.postgres.EntryQueryCommand.run(EntryQueryCommand.java:61) at org.cmdbuild.dao.driver.postgres.PostgresDriver.query(PostgresDriver.java:179) at org.cmdbuild.dao.view.DBDataView.executeNonEmptyQuery(DBDataView.java:394) at org.cmdbuild.dao.view.user.UserDataView.executeNonEmptyQuery(UserDataView.java:214) at org.cmdbuild.dao.view.user.UserDataView.executeNonEmptyQuery(UserDataView.java:37) at org.cmdbuild.dao.view.AbstractDataView.executeQuery(AbstractDataView.java:30) at org.cmdbuild.dao.query.QuerySpecsBuilder.run(QuerySpecsBuilder.java:318) at org.cmdbuild.logic.data.access.DataViewCardFetcher.fetch(DataViewCardFetcher.java:190) at org.cmdbuild.logic.data.access.DefaultDataAccessLogic.fetchCardsWithClassName(DefaultDataAccessLogic.java:332) at org.cmdbuild.logic.data.access.DefaultDataAccessLogic.fetchCards(DefaultDataAccessLogic.java:321) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:616) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:196) at sun.proxy.$Proxy124.fetchCards(Unknown Source) at org.cmdbuild.servlets.json.management.ModCard.getCardList(ModCard.java:186) at org.cmdbuild.servlets.json.management.ModCard.getCardList(ModCard.java:96) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:616) at org.cmdbuild.servlets.JSONDispatcher.dispatch(JSONDispatcher.java:94) at org.cmdbuild.servlets.JSONDispatcher.doGet(JSONDispatcher.java:60) at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.filters.ExpiresFilter.doFilter(ExpiresFilter.java:1179) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.cmdbuild.filters.AuthFilter.doFilter(AuthFilter.java:133) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.cmdbuild.filters.PatchManagerFilter.doFilter(PatchManagerFilter.java:33) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.cmdbuild.filters.ConfCheckFilter.doFilter(ConfCheckFilter.java:31) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.cmdbuild.filters.TranslationFilter.doFilter(TranslationFilter.java:39) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:200) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:679) Caused by: org.postgresql.util.PSQLException: ERROR: missing FROM-clause entry for table "Server" Position: 11333 at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2102) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1835) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:500) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:273) at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96) at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96) at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:643) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:586) ... 62 more