From ce1745664224766aa81e1bb8e3590d29df1421cd Mon Sep 17 00:00:00 2001 From: serge-rider Date: Fri, 8 Jun 2018 00:21:24 +0300 Subject: [PATCH] #3589 PG: owner permissions parse fix --- .../dbeaver/ext/postgresql/PostgreUtils.java | 25 ++++++++++++++++++- .../model/PostgrePrivilegeType.java | 2 +- .../postgresql/model/PostgreProcedure.java | 2 +- .../postgresql/model/PostgreTableBase.java | 2 +- .../postgresql/model/PostgreTableColumn.java | 2 +- 5 files changed, 28 insertions(+), 5 deletions(-) diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/PostgreUtils.java b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/PostgreUtils.java index ab9c3e65e9..04878d73b9 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/PostgreUtils.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/PostgreUtils.java @@ -455,8 +455,31 @@ public class PostgreUtils { driver.getDriverParameter(PostgreConstants.PROP_GREENPLUM_DRIVER)); } - public static List extractPermissionsFromACL(@NotNull PostgrePermissionsOwner owner, @Nullable Object acl) { + public static List extractPermissionsFromACL(DBRProgressMonitor monitor, @NotNull PostgrePermissionsOwner owner, @Nullable Object acl) throws DBException { if (!(acl instanceof java.sql.Array)) { + if (acl == null) { + // Special case. Means ALL permissions are granted to table owner + PostgreRole objectOwner = owner.getOwner(monitor); + String granteeName = objectOwner == null ? null : objectOwner.getName(); + + List privileges = new ArrayList<>(); + for (PostgrePrivilegeType pt : PostgrePrivilegeType.values()) { + if (pt.supportsType(owner.getClass())) { + privileges.add( + new PostgrePrivilege( + granteeName, + granteeName, + owner.getDatabase().getName(), + owner.getSchema().getName(), + owner.getName(), + pt, + false, + false)); + } + } + PostgreObjectPermission permission = new PostgreObjectPermission(owner, objectOwner == null ? null : objectOwner.getName(), privileges); + return Collections.singletonList(permission); + } return Collections.emptyList(); } Object itemArray; diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgrePrivilegeType.java b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgrePrivilegeType.java index d749b48be3..bb8a55d8a3 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgrePrivilegeType.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgrePrivilegeType.java @@ -35,7 +35,7 @@ public enum PostgrePrivilegeType { EXECUTE('X', true, PostgreProcedure.class), - UNKNOWN((char)0, false, Object.class); + UNKNOWN((char)0, false); private final Class[] targetType; private final char code; diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreProcedure.java b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreProcedure.java index e9ed526659..cc555044cb 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreProcedure.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreProcedure.java @@ -454,7 +454,7 @@ public class PostgreProcedure extends AbstractProcedure getPermissions(DBRProgressMonitor monitor, boolean includeNestedObjects) throws DBException { - return PostgreUtils.extractPermissionsFromACL(this, acl); + return PostgreUtils.extractPermissionsFromACL(monitor,this, acl); } @Override diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreTableBase.java b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreTableBase.java index 30cf62d56e..2421c74e2d 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreTableBase.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreTableBase.java @@ -193,7 +193,7 @@ public abstract class PostgreTableBase extends JDBCTable getPermissions(DBRProgressMonitor monitor, boolean includeNestedObjects) throws DBException { - List tablePermissions = PostgreUtils.extractPermissionsFromACL(this, acl); + List tablePermissions = PostgreUtils.extractPermissionsFromACL(monitor, this, acl); if (!includeNestedObjects) { return tablePermissions; } diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreTableColumn.java b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreTableColumn.java index b7dcbb8cea..8282b6900d 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreTableColumn.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreTableColumn.java @@ -48,7 +48,7 @@ public class PostgreTableColumn extends PostgreAttribute imple @Override public Collection getPermissions(DBRProgressMonitor monitor, boolean includeNestedObjects) throws DBException { - return PostgreUtils.extractPermissionsFromACL(this, getAcl()); + return PostgreUtils.extractPermissionsFromACL(monitor, this, getAcl()); } } -- GitLab