Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
suliangchun
dbeaver
提交
e15120a4
D
dbeaver
项目概览
suliangchun
/
dbeaver
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dbeaver
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e15120a4
编写于
8月 09, 2019
作者:
S
Serge Rider
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
#6397 Restrict structure modifications
Former-commit-id:
e1d748c0
上级
f4d3f35e
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
58 addition
and
15 deletion
+58
-15
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBUtils.java
...ss.dbeaver.model/src/org/jkiss/dbeaver/model/DBUtils.java
+12
-0
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/navigator/DBNUtils.java
...model/src/org/jkiss/dbeaver/model/navigator/DBNUtils.java
+8
-0
plugins/org.jkiss.dbeaver.registry/src/org/jkiss/dbeaver/registry/DataSourceDescriptor.java
.../src/org/jkiss/dbeaver/registry/DataSourceDescriptor.java
+1
-1
plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/actions/ObjectPropertyTester.java
...rc/org/jkiss/dbeaver/ui/actions/ObjectPropertyTester.java
+22
-13
plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/editors/entity/EntityEditor.java
...src/org/jkiss/dbeaver/ui/editors/entity/EntityEditor.java
+10
-0
plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/editors/entity/properties/TabbedFolderPageForm.java
...er/ui/editors/entity/properties/TabbedFolderPageForm.java
+2
-1
plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/navigator/itemlist/ItemListControl.java
.../jkiss/dbeaver/ui/navigator/itemlist/ItemListControl.java
+3
-0
未找到文件。
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBUtils.java
浏览文件 @
e15120a4
...
...
@@ -31,6 +31,9 @@ import org.jkiss.dbeaver.model.impl.DBObjectNameCaseTransformer;
import
org.jkiss.dbeaver.model.impl.data.DBDValueError
;
import
org.jkiss.dbeaver.model.impl.data.DefaultValueHandler
;
import
org.jkiss.dbeaver.model.impl.sql.BasicSQLDialect
;
import
org.jkiss.dbeaver.model.navigator.DBNDataSource
;
import
org.jkiss.dbeaver.model.navigator.DBNDatabaseNode
;
import
org.jkiss.dbeaver.model.navigator.DBNNode
;
import
org.jkiss.dbeaver.model.runtime.DBRProgressMonitor
;
import
org.jkiss.dbeaver.model.runtime.VoidProgressMonitor
;
import
org.jkiss.dbeaver.model.sql.*
;
...
...
@@ -1839,4 +1842,13 @@ public final class DBUtils {
}
return
null
;
}
public
static
boolean
isReadOnly
(
DBSObject
object
)
{
if
(
object
==
null
)
{
return
true
;
}
DBPDataSource
dataSource
=
object
.
getDataSource
();
return
dataSource
==
null
||
!
dataSource
.
getContainer
().
hasModifyPermission
(
DBPDataSourcePermission
.
PERMISSION_EDIT_METADATA
);
}
}
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/navigator/DBNUtils.java
浏览文件 @
e15120a4
...
...
@@ -21,6 +21,7 @@ import org.jkiss.code.NotNull;
import
org.jkiss.dbeaver.DBException
;
import
org.jkiss.dbeaver.Log
;
import
org.jkiss.dbeaver.ModelPreferences
;
import
org.jkiss.dbeaver.model.DBPDataSourcePermission
;
import
org.jkiss.dbeaver.model.DBUtils
;
import
org.jkiss.dbeaver.model.preferences.DBPPreferenceStore
;
import
org.jkiss.dbeaver.model.runtime.DBRProgressMonitor
;
...
...
@@ -148,6 +149,13 @@ public class DBNUtils {
return
divPos
==
-
1
?
path
:
path
.
substring
(
divPos
+
1
);
}
public
static
boolean
isReadOnly
(
DBNNode
node
)
{
return
node
instanceof
DBNDatabaseNode
&&
!(
node
instanceof
DBNDataSource
)
&&
!((
DBNDatabaseNode
)
node
).
getDataSourceContainer
().
hasModifyPermission
(
DBPDataSourcePermission
.
PERMISSION_EDIT_METADATA
);
}
private
static
class
NodeNameComparator
implements
Comparator
<
DBNNode
>
{
static
NodeNameComparator
INSTANCE
=
new
NodeNameComparator
();
@Override
...
...
plugins/org.jkiss.dbeaver.registry/src/org/jkiss/dbeaver/registry/DataSourceDescriptor.java
浏览文件 @
e15120a4
...
...
@@ -357,7 +357,7 @@ public class DataSourceDescriptor
if
(
connectionReadOnly
)
{
return
false
;
}
return
connectionModifyRestrictions
!=
null
&&
!
connectionModifyRestrictions
.
contains
(
permission
);
return
connectionModifyRestrictions
==
null
||
!
connectionModifyRestrictions
.
contains
(
permission
);
}
@Override
...
...
plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/actions/ObjectPropertyTester.java
浏览文件 @
e15120a4
...
...
@@ -22,8 +22,8 @@ import org.eclipse.jface.viewers.IStructuredSelection;
import
org.eclipse.swt.dnd.Clipboard
;
import
org.eclipse.swt.widgets.Display
;
import
org.eclipse.ui.IWorkbenchPart
;
import
org.jkiss.dbeaver.model.DBPDataSource
;
import
org.jkiss.dbeaver.model.DBPOrderedObject
;
import
org.jkiss.dbeaver.model.DBUtils
;
import
org.jkiss.dbeaver.model.app.DBPResourceHandler
;
import
org.jkiss.dbeaver.model.edit.DBEObjectMaker
;
import
org.jkiss.dbeaver.model.edit.DBEObjectManager
;
...
...
@@ -130,9 +130,14 @@ public class ObjectPropertyTester extends PropertyTester
if
(
node
instanceof
DBNDataSource
||
node
instanceof
DBNLocalFolder
)
{
return
true
;
}
if
(
DBNUtils
.
isReadOnly
(
node
))
{
return
false
;
}
if
(
node
instanceof
DBSWrapper
)
{
DBSObject
object
=
((
DBSWrapper
)
node
).
getObject
();
if
(
object
==
null
||
isReadOnly
(
object
)
||
!(
node
.
getParentNode
()
instanceof
DBNContainer
))
{
if
(
object
==
null
||
DBUtils
.
isReadOnly
(
object
)
||
!(
node
.
getParentNode
()
instanceof
DBNContainer
))
{
return
false
;
}
DBEObjectMaker
objectMaker
=
getObjectManager
(
object
.
getClass
(),
DBEObjectMaker
.
class
);
...
...
@@ -149,10 +154,13 @@ public class ObjectPropertyTester extends PropertyTester
return
true
;
}
if
(
node
instanceof
DBNDatabaseNode
)
{
if
(
DBNUtils
.
isReadOnly
(
node
))
{
return
false
;
}
DBSObject
object
=
((
DBNDatabaseNode
)
node
).
getObject
();
return
object
!=
null
&&
!
isReadOnly
(
object
)
&&
!
DBUtils
.
isReadOnly
(
object
)
&&
object
.
isPersisted
()
&&
node
.
getParentNode
()
instanceof
DBNContainer
&&
getObjectManager
(
object
.
getClass
(),
DBEObjectRenamer
.
class
)
!=
null
;
...
...
@@ -162,6 +170,9 @@ public class ObjectPropertyTester extends PropertyTester
case
PROP_CAN_MOVE_UP:
case
PROP_CAN_MOVE_DOWN:
{
if
(
node
instanceof
DBNDatabaseNode
)
{
if
(
DBNUtils
.
isReadOnly
(
node
))
{
return
false
;
}
DBSObject
object
=
((
DBNDatabaseNode
)
node
).
getObject
();
if
(
object
instanceof
DBPOrderedObject
)
{
DBEObjectReorderer
objectReorderer
=
getObjectManager
(
object
.
getClass
(),
DBEObjectReorderer
.
class
);
...
...
@@ -239,8 +250,11 @@ public class ObjectPropertyTester extends PropertyTester
}
else
{
return
false
;
}
if
(
DBNUtils
.
isReadOnly
(
node
))
{
return
false
;
}
if
(
node
instanceof
DBSWrapper
&&
isReadOnly
(((
DBSWrapper
)
node
).
getObject
()))
{
if
(
node
instanceof
DBSWrapper
&&
DBUtils
.
isReadOnly
(((
DBSWrapper
)
node
).
getObject
()))
{
return
false
;
}
if
(
objectType
==
null
)
{
...
...
@@ -255,6 +269,10 @@ public class ObjectPropertyTester extends PropertyTester
}
return
true
;
}
if
(
DBNUtils
.
isReadOnly
(
node
))
{
return
false
;
}
// Check whether only single object type can be created or multiple ones
List
<
IContributionItem
>
createItems
=
NavigatorHandlerObjectCreateNew
.
fillCreateMenuItems
(
null
,
node
);
...
...
@@ -265,15 +283,6 @@ public class ObjectPropertyTester extends PropertyTester
}
}
public
static
boolean
isReadOnly
(
DBSObject
object
)
{
if
(
object
==
null
)
{
return
true
;
}
DBPDataSource
dataSource
=
object
.
getDataSource
();
return
dataSource
==
null
||
dataSource
.
getContainer
().
isConnectionReadOnly
();
}
private
static
<
T
extends
DBEObjectManager
>
T
getObjectManager
(
Class
<?>
objectType
,
Class
<
T
>
managerType
)
{
return
ObjectManagerRegistry
.
getInstance
().
getObjectManager
(
objectType
,
managerType
);
...
...
plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/editors/entity/EntityEditor.java
浏览文件 @
e15120a4
...
...
@@ -228,6 +228,14 @@ public class EntityEditor extends MultiPageDatabaseEditor
return
;
}
if
(
DBUtils
.
isReadOnly
(
getDatabaseObject
()))
{
DBWorkbench
.
getPlatformUI
().
showMessageBox
(
"Read-only"
,
"Object ["
+
DBUtils
.
getObjectFullName
(
getDatabaseObject
(),
DBPEvaluationContext
.
UI
)
+
"] is read-only"
,
true
);
return
;
}
// Flush all nested object editors and result containers
for
(
IEditorPart
editor
:
editorMap
.
values
())
{
if
(
editor
instanceof
ObjectPropertiesEditor
||
editor
instanceof
IEntityDataContainer
)
{
...
...
@@ -240,6 +248,8 @@ public class EntityEditor extends MultiPageDatabaseEditor
}
}
// Check read-only
// Show preview
int
previewResult
=
IDialogConstants
.
PROCEED_ID
;
if
(
DBWorkbench
.
getPlatform
().
getPreferenceStore
().
getBoolean
(
NavigatorPreferences
.
NAVIGATOR_SHOW_SQL_PREVIEW
))
{
...
...
plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/editors/entity/properties/TabbedFolderPageForm.java
浏览文件 @
e15120a4
...
...
@@ -36,6 +36,7 @@ import org.eclipse.ui.part.MultiPageEditorSite;
import
org.jkiss.dbeaver.Log
;
import
org.jkiss.dbeaver.model.DBConstants
;
import
org.jkiss.dbeaver.model.DBPNamedObject
;
import
org.jkiss.dbeaver.model.DBUtils
;
import
org.jkiss.dbeaver.model.DBValueFormatting
;
import
org.jkiss.dbeaver.model.data.DBDDisplayFormat
;
import
org.jkiss.dbeaver.model.edit.DBECommand
;
...
...
@@ -421,7 +422,7 @@ public class TabbedFolderPageForm extends TabbedFolderPage implements IRefreshab
private
void
createPropertyEditor
(
Composite
group
,
DBPPropertyDescriptor
prop
)
{
DBSObject
databaseObject
=
input
.
getDatabaseObject
();
boolean
isReadOnlyCon
=
databaseObject
==
null
||
databaseObject
.
getDataSource
().
getContainer
().
isConnectionReadOnly
(
);
boolean
isReadOnlyCon
=
databaseObject
==
null
||
DBUtils
.
isReadOnly
(
databaseObject
);
if
(
prop
==
null
)
{
UIUtils
.
createEmptyLabel
(
group
,
2
,
1
);
}
else
{
...
...
plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/navigator/itemlist/ItemListControl.java
浏览文件 @
e15120a4
...
...
@@ -296,6 +296,9 @@ public class ItemListControl extends NodeListControl
protected
boolean
canEdit
(
Object
element
)
{
DBNNode
object
=
(
DBNNode
)
element
;
if
(
DBNUtils
.
isReadOnly
(
object
))
{
return
false
;
}
final
ObjectPropertyDescriptor
property
=
objectColumn
.
getProperty
(
getObjectValue
(
object
));
return
property
!=
null
&&
property
.
isEditable
(
getObjectValue
(
object
));
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录