diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/ui/editors/PostgresRolePrivilegesEditor.java b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/ui/editors/PostgresRolePrivilegesEditor.java index 1bd00df9c0ce4a23744ad5aec36ccf95a8df960f..d1a155dc06c0b7770ce9b73443db8930a38568c2 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/ui/editors/PostgresRolePrivilegesEditor.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/ui/editors/PostgresRolePrivilegesEditor.java @@ -18,6 +18,7 @@ package org.jkiss.dbeaver.ext.postgresql.ui.editors; import org.eclipse.jface.action.IContributionManager; import org.eclipse.jface.action.Separator; +import org.eclipse.jface.dialogs.ControlEnableState; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; @@ -62,6 +63,7 @@ import org.jkiss.dbeaver.ui.navigator.NavigatorUtils; import org.jkiss.dbeaver.ui.navigator.database.DatabaseNavigatorLabelProvider; import org.jkiss.dbeaver.ui.navigator.database.DatabaseNavigatorTree; import org.jkiss.dbeaver.ui.navigator.database.DatabaseNavigatorTreeFilter; +import org.jkiss.utils.ArrayUtils; import org.jkiss.utils.CommonUtils; import java.lang.reflect.InvocationTargetException; @@ -76,10 +78,12 @@ public class PostgresRolePrivilegesEditor extends AbstractDatabaseObjectEditor
permissionMap = new HashMap<>(); private Text objectDescriptionText; @@ -138,7 +142,7 @@ public class PostgresRolePrivilegesEditor extends AbstractDatabaseObjectEditor
privileges = new ArrayList<>();
-// privileges.add(new PostgrePrivilege(
-// getDatabaseObject().getDataSource().getContainer().getConnectionConfiguration().getUserName(),
-// getDatabaseObject().getName(),
-// table.getSchema().getDatabase().getName(),
-// table.getSchema().getName(),
-// table.getName(),
-// privilegeType,
-// false,
-// false));
-
- currentPermission = new PostgreRolePermission(getDatabaseObject(), table.getSchema().getName(), table.getName(), privileges);
+ if (ArrayUtils.isEmpty(currentObjects)) {
+ DBeaverUI.getInstance().showError("Update privilege", "Can't update privilege - no current object");
+ return;
+ }
+
+ for (int i = 0; i < currentObjects.length; i++) {
+ DBSObject currentObject = currentObjects[i];
+ PostgrePermission permission = currentPermissions[i];
+ if (permission == null) {
+ if (!grant) {
+ // No permission - nothing to revoke
+ continue;
+ }
+ if (isRoleEditor()) {
+ PostgreTableBase table = (PostgreTableBase) currentObject;
+ permission = new PostgreRolePermission(getDatabaseObject(), table.getSchema().getName(), table.getName(), Collections.emptyList());
+ } else {
+ permission = new PostgreTablePermission(getDatabaseObject(), currentObject.getName(), Collections.emptyList());
+ }
+ // Add to map
+ permissionMap.put(permission.getName(), permission);
} else {
- List ");
- this.currentPermission = null;
- this.currentObject = null;
+ this.currentPermissions = null;
+ this.currentObjects = null;
+ editEnabled = false;
+
} else {
objectDescriptionText.setText(objectNames.toString());
- this.currentObject = objects.get(0);
- this.currentPermission = getObjectPermissions(this.currentObject);
+ this.currentObjects = objects.toArray(new DBSObject[objects.size()]);
+ this.currentPermissions = new PostgrePermission[this.currentObjects.length];
+ for (int i = 0; i < currentObjects.length; i++) {
+ this.currentPermissions[i] = getObjectPermissions(currentObjects[i]);
+ }
+ editEnabled = !CommonUtils.isEmpty(objects);
+ }
+
+ if (editEnabled) {
+ if (permissionsEnable != null) {
+ permissionsEnable.restore();
+ permissionsEnable = null;
+ }
+ } else {
+ if (permissionsEnable == null) {
+ permissionsEnable = ControlEnableState.disable(permEditPanel);
+ }
}
- if (currentPermission == null) {
+ if (ArrayUtils.isEmpty(currentPermissions)) {
// We have object(s) but no permissions for them
- permissionTable.setEnabled(!CommonUtils.isEmpty(objects));
for (TableItem item : permissionTable.getItems()) {
item.setChecked(false);
item.setText(1, "");
item.setText(2, "");
}
} else {
- permissionTable.setEnabled(true);
for (TableItem item : permissionTable.getItems()) {
PostgrePrivilegeType privType = (PostgrePrivilegeType) item.getData();
- short perm = currentPermission.getPermission(privType);
+ short perm = currentPermissions[0] == null ? PostgrePermission.NONE : currentPermissions[0].getPermission(privType);
item.setChecked((perm & PostgrePermission.GRANTED) != 0);
if ((perm & PostgrePermission.WITH_GRANT_OPTION) != 0) {
item.setText(1, "X");