提交 7a5ab59f 编写于 作者: S serge-rider

#3206 Permission grants read refactoring

上级 13d5eb09
......@@ -23,17 +23,20 @@ import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.ext.postgresql.edit.PostgreCommandGrantPrivilege;
import org.jkiss.dbeaver.ext.postgresql.model.*;
import org.jkiss.dbeaver.model.DBPDataKind;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.DBPEvaluationContext;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.connection.DBPDriver;
import org.jkiss.dbeaver.model.edit.DBEPersistAction;
import org.jkiss.dbeaver.model.exec.DBCException;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCPreparedStatement;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCResultSet;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.impl.AbstractObjectCache;
import org.jkiss.dbeaver.model.impl.edit.SQLDatabasePersistActionComment;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSObject;
......@@ -482,4 +485,24 @@ public class PostgreUtils {
opt.append(")");
return opt.toString();
}
public static void getObjectGrantPermissionActions(DBRProgressMonitor monitor, PostgrePermissionsOwner table, List<DBEPersistAction> actions, Map<String, Object> options) throws DBException {
if (CommonUtils.getOption(options, PostgreConstants.OPTION_DDL_SHOW_PERMISSIONS)) {
// Permissions
Collection<PostgrePermission> permissions = table.getPermissions(monitor);
if (!CommonUtils.isEmpty(permissions)) {
actions.add(new SQLDatabasePersistActionComment(table.getDataSource(), "Permissions"));
for (PostgrePermission permission : permissions) {
if (permission.hasAllPrivileges(table)) {
Collections.addAll(actions,
new PostgreCommandGrantPrivilege(permission.getOwner(), true, permission, new PostgrePrivilegeType[] { PostgrePrivilegeType.ALL })
.getPersistActions(options));
} else {
PostgreCommandGrantPrivilege grant = new PostgreCommandGrantPrivilege(permission.getOwner(), true, permission, permission.getPrivileges());
Collections.addAll(actions, grant.getPersistActions(options));
}
}
}
}
}
}
......@@ -18,15 +18,18 @@ package org.jkiss.dbeaver.ext.postgresql.edit;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.ext.postgresql.PostgreUtils;
import org.jkiss.dbeaver.ext.postgresql.model.PostgreProcedure;
import org.jkiss.dbeaver.ext.postgresql.model.PostgreSchema;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.DBPScriptObject;
import org.jkiss.dbeaver.model.edit.DBECommandContext;
import org.jkiss.dbeaver.model.edit.DBEPersistAction;
import org.jkiss.dbeaver.model.impl.DBSObjectCache;
import org.jkiss.dbeaver.model.impl.edit.SQLDatabasePersistAction;
import org.jkiss.dbeaver.model.impl.sql.edit.SQLObjectEditor;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.runtime.VoidProgressMonitor;
import org.jkiss.dbeaver.model.sql.SQLUtils;
import org.jkiss.dbeaver.ui.UITask;
import org.jkiss.dbeaver.ui.editors.object.struct.CreateProcedurePage;
......@@ -116,6 +119,16 @@ public class PostgreProcedureManager extends SQLObjectEditor<PostgreProcedure, P
"COMMENT ON " + command.getObject().getProcedureTypeName() + " " + command.getObject().getFullQualifiedSignature() +
" IS " + SQLUtils.quoteString(command.getObject(), command.getObject().getDescription())));
}
boolean isDDL = CommonUtils.getOption(options, DBPScriptObject.OPTION_DDL_SOURCE);
if (isDDL) {
DBRProgressMonitor monitor = new VoidProgressMonitor();
try {
PostgreUtils.getObjectGrantPermissionActions(monitor, command.getObject(), actions, options);
} catch (DBException e) {
log.error(e);
}
}
}
}
......
......@@ -17,7 +17,7 @@
package org.jkiss.dbeaver.ext.postgresql.edit;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.ext.postgresql.PostgreConstants;
import org.jkiss.dbeaver.ext.postgresql.PostgreUtils;
import org.jkiss.dbeaver.ext.postgresql.model.*;
import org.jkiss.dbeaver.model.DBConstants;
import org.jkiss.dbeaver.model.DBPEvaluationContext;
......@@ -33,7 +33,6 @@ import org.jkiss.dbeaver.model.struct.DBSEntityAssociation;
import org.jkiss.utils.CommonUtils;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
......@@ -104,30 +103,11 @@ public abstract class PostgreTableManagerBase extends SQLTableManager<PostgreTab
}
}
getTableGrantPermissionActions(monitor, table, actions, options);
PostgreUtils.getObjectGrantPermissionActions(monitor, table, actions, options);
} catch (DBException e) {
log.error(e);
}
}
}
public static void getTableGrantPermissionActions(DBRProgressMonitor monitor, PostgreTableBase table, List<DBEPersistAction> actions, Map<String, Object> options) throws DBException {
if (CommonUtils.getOption(options, PostgreConstants.OPTION_DDL_SHOW_PERMISSIONS)) {
// Permissions
Collection<PostgrePermission> permissions = table.getPermissions(monitor);
if (!CommonUtils.isEmpty(permissions)) {
actions.add(new SQLDatabasePersistActionComment(table.getDataSource(), "Permissions"));
for (PostgrePermission permission : permissions) {
if (permission.hasAllPrivileges(table)) {
Collections.addAll(actions,
new PostgreCommandGrantPrivilege(permission.getOwner(), true, permission, new PostgrePrivilegeType[] { PostgrePrivilegeType.ALL })
.getPersistActions(options));
} else {
PostgreCommandGrantPrivilege grant = new PostgreCommandGrantPrivilege(permission.getOwner(), true, permission, permission.getPrivileges());
Collections.addAll(actions, grant.getPersistActions(options));
}
}
}
}
}
}
......@@ -19,7 +19,7 @@ package org.jkiss.dbeaver.ext.postgresql.model;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.ext.postgresql.edit.PostgreTableManagerBase;
import org.jkiss.dbeaver.ext.postgresql.PostgreUtils;
import org.jkiss.dbeaver.model.DBPEvaluationContext;
import org.jkiss.dbeaver.model.DBPQualifiedObject;
import org.jkiss.dbeaver.model.DBUtils;
......@@ -215,7 +215,7 @@ public class PostgreSequence extends PostgreTableBase implements DBSSequence, DB
}
List<DBEPersistAction> actions = new ArrayList<>();
PostgreTableManagerBase.getTableGrantPermissionActions(monitor, this, actions, options);
PostgreUtils.getObjectGrantPermissionActions(monitor, this, actions, options);
if (!actions.isEmpty()) {
sql.append("\n\n");
sql.append(SQLUtils.generateScript(getDataSource(), actions.toArray(new DBEPersistAction[actions.size()]), false));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册