[Schmitzm-commits] r1634 - trunk/schmitzm-core/src/main/java/de/schmitzm/geotools/postgres

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Thu Jul 21 11:13:27 CEST 2011


Author: alfonx
Date: 2011-07-21 11:13:27 +0200 (Thu, 21 Jul 2011)
New Revision: 1634

Modified:
   trunk/schmitzm-core/src/main/java/de/schmitzm/geotools/postgres/PGUtil.java
Log:
grant and revoke privigleges to roles in PGUtil

Modified: trunk/schmitzm-core/src/main/java/de/schmitzm/geotools/postgres/PGUtil.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/geotools/postgres/PGUtil.java	2011-07-18 21:17:34 UTC (rev 1633)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/geotools/postgres/PGUtil.java	2011-07-21 09:13:27 UTC (rev 1634)
@@ -10,20 +10,75 @@
 import de.schmitzm.lang.LangUtil;
 
 /**
- * Hilfsmethoden für PostgreSQL
+ * Hilfsmethoden für PostgreSQL. Die Dependency soll nur {@link Connection} sein. In Hibernate kann über #doWork eine
+ * {@link Connection} erhalten werden.
  */
 public class PGUtil {
 	static final Logger log = Logger.getLogger(PGUtil.class);
 
 	/**
-	 * Querys the <code>geometry_columns</code> table is part of every postgis
-	 * installation and must/should describe the geometry columns and tables.
+	 * PostgreSQL Privilegien die per Grant einer Tabelle zugeordnet werden können.<br/>
+	 * 
+	 * @see http://www.postgresql.org/docs/9.1/static/sql-grant.html
 	 */
+	enum Privileges {
+		SELECT, INSERT, UPDATE, DELETE, REFERENCES, TEMPORARY, ALL_PRIVILEGES("ALL PRIVILEGES");
+
+		String sql;
+
+		Privileges() {
+			this.sql = this.toString();
+		}
+
+		Privileges(String sql) {
+			this.sql = sql;
+		}
+	}
+
+	/**
+	 * Fügt Privilegien für eine Rolle einer Tabelle hinzu.
+	 * 
+	 * @param tablename
+	 *            Tabellennamen, optional mit "schema.tablename"
+	 * @param targetRole
+	 *            Darf PUBLIC sein, oder Name einer ROLLE.
+	 * @param privileges
+	 *            List der zuzuordnenden Privilegien
+	 * @throws SQLException
+	 */
+	public void grantPrivilegesOnTable(Connection c, String tablename, String targetRole, Privileges... privileges)
+			throws SQLException {
+		// GRANT SELECT, UPDATE, INSERT ON mytable TO admin;
+		String sql = "GRANT " + LangUtil.stringConcatWithSep(",", (Object[]) privileges) + " ON " + tablename + " TO "
+				+ targetRole;
+		c.createStatement().executeUpdate(sql);
+	}
+
+	/**
+	 * Entfernt Privilegien für eine Rolle von einre Tabelle.
+	 * 
+	 * @param tablename
+	 *            Tabellennamen, optional mit "schema.tablename"
+	 * @param privileges
+	 *            List der zuzuordnenden Privilegien
+	 * @throws SQLException
+	 */
+	public void revokePrivilegesOnTable(Connection c, String tablename, String targetRole, Privileges... privileges)
+			throws SQLException {
+		// GRANT SELECT, UPDATE, INSERT ON mytable TO admin;
+		String sql = "REVOKE " + LangUtil.stringConcatWithSep(",", (Object[]) privileges) + " ON " + tablename
+				+ " FROM " + targetRole;
+		c.createStatement().executeUpdate(sql);
+	}
+
+	/**
+	 * Querys the <code>geometry_columns</code> table is part of every POSTGIS installation and must/should describe the
+	 * geometry columns and tables.
+	 */
 	static public String[] getColumnsDescribedInGeometryColumnsTable(Statement s) {
 		String[] columns = new String[0];
 		try {
-			ResultSet askGeoe = s
-					.executeQuery("SELECT f_table_name FROM geometry_columns;");
+			ResultSet askGeoe = s.executeQuery("SELECT f_table_name FROM geometry_columns;");
 			while (askGeoe.next()) {
 				columns = LangUtil.extendArray(columns, askGeoe.getString(1));
 			}
@@ -42,16 +97,10 @@
 	 * @param geoColumnName
 	 * @param srid
 	 */
-	public static void createOrUpdateGeometrsColumnsEntry(String tableName,
-			String geoColumnName, int srid) {
+	public static void createOrUpdateGeometrsColumnsEntry(String tableName, String geoColumnName, int srid) {
 
 		String createGeometryEntrySQL = "INSERT INTO geometry_columns (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, coord_dimension, srid, \"type\") VALUES ( '', 'public', '"
-				+ tableName
-				+ "', '"
-				+ geoColumnName
-				+ "', 2, "
-				+ srid
-				+ ",'MULTIPOLYGON' ) LIMIT 1;";
+				+ tableName + "', '" + geoColumnName + "', 2, " + srid + ",'MULTIPOLYGON' ) LIMIT 1;";
 	}
 
 	// TODO isGeoColumn();
@@ -59,8 +108,8 @@
 	/**
 	 * @param binding
 	 *            Eine "einfache" Javaklasse, die in PG abgebildet werden soll.
-	 * @return einen PG-spezifischen Datentypenamen für einen Javatyp zurück,
-	 *         z.b. "double precision" für <code>Double.class</code>
+	 * @return einen PG-spezifischen Datentypenamen für einen Javatyp zurück, z.b. "double precision" für
+	 *         <code>Double.class</code>
 	 */
 	public static String getColTypeName(Class<?> binding) {
 
@@ -74,17 +123,17 @@
 			return "bigint";
 		}
 
-		throw new RuntimeException("DB Type mapping for " + binding
-				+ " not yet implemented.");
+		throw new RuntimeException("DB Type mapping for " + binding + " not yet implemented.");
 	}
-	
+
 	/**
-	 * Legt ein Schema an, wenn es vorher nicht existierte. 
+	 * Legt ein Schema an, wenn es vorher nicht existierte.
+	 * 
 	 * @return <code>true</code> wenn das Schema neu angelegt wurde.
 	 */
 	public static boolean createSchemaIfNotExists(Connection c, String schemaname) throws SQLException {
 		if (!existsSchema(c, schemaname)) {
-			c.createStatement().execute("create schema "+schemaname);
+			c.createStatement().execute("create schema " + schemaname);
 			return true;
 		}
 		return false;
@@ -94,7 +143,8 @@
 	 * Liefert <code>true</code> wenn ein Schema mit dem Namen in der PG Datenbank existiert.
 	 */
 	public static boolean existsSchema(Connection c, String schemaname) throws SQLException {
-		ResultSet rs = c.createStatement().executeQuery("select 1 from pg_catalog.pg_namespace where nspname = '"+schemaname+"'");
+		ResultSet rs = c.createStatement().executeQuery(
+				"select 1 from pg_catalog.pg_namespace where nspname = '" + schemaname + "'");
 		return rs.next();
 	}
 }



More information about the Schmitzm-commits mailing list