Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
suliangchun
dbeaver
提交
c0c138b5
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,发现更多精彩内容 >>
提交
c0c138b5
编写于
1月 05, 2018
作者:
S
serge-rider
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
#1712 Permission table enablement. Batch objects processing support
Former-commit-id:
caea3bbf
上级
21761e51
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
77 addition
and
53 deletion
+77
-53
plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/ui/editors/PostgresRolePrivilegesEditor.java
...t/postgresql/ui/editors/PostgresRolePrivilegesEditor.java
+77
-53
未找到文件。
plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/ui/editors/PostgresRolePrivilegesEditor.java
浏览文件 @
c0c138b5
...
...
@@ -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<P
private
boolean
isLoaded
;
private
DatabaseNavigatorTree
roleOrObjectTable
;
private
Composite
permEditPanel
;
private
Table
permissionTable
;
private
ControlEnableState
permissionsEnable
;
private
PostgrePermission
currentPermission
;
private
DBSObject
currentObject
;
private
DBSObject
[]
currentObjects
;
private
PostgrePermission
[]
currentPermissions
;
private
Map
<
String
,
PostgrePermission
>
permissionMap
=
new
HashMap
<>();
private
Text
objectDescriptionText
;
...
...
@@ -138,7 +142,7 @@ public class PostgresRolePrivilegesEditor extends AbstractDatabaseObjectEditor<P
});
{
Composite
permEditPanel
=
new
Composite
(
composite
,
SWT
.
NONE
);
permEditPanel
=
new
Composite
(
composite
,
SWT
.
NONE
);
permEditPanel
.
setLayout
(
new
GridLayout
(
1
,
true
));
permissionTable
=
new
Table
(
permEditPanel
,
SWT
.
FULL_SELECTION
|
SWT
.
CHECK
);
...
...
@@ -216,58 +220,62 @@ public class PostgresRolePrivilegesEditor extends AbstractDatabaseObjectEditor<P
private
void
updateCurrentPrivileges
(
boolean
grant
,
PostgrePrivilegeType
privilegeType
)
{
if
(
currentPermission
==
null
)
{
if
(
currentObject
==
null
)
{
DBeaverUI
.
getInstance
().
showError
(
"Update privilege"
,
"Can't update privilege - no current object"
);
return
;
}
if
(
isRoleEditor
())
{
PostgreTableBase
table
=
(
PostgreTableBase
)
currentObject
;
List
<
PostgrePrivilege
>
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
<
PostgrePrivilege
>
privileges
=
new
ArrayList
<>();
currentPermission
=
new
PostgreTablePermission
(
getDatabaseObject
(),
currentObject
.
getName
(),
privileges
);
// Check for privilege was already granted for this object
boolean
hasPriv
=
permission
.
getPermission
(
privilegeType
)
!=
PostgrePermission
.
NONE
;
if
(
grant
==
hasPriv
)
{
continue
;
}
}
// Add to map
permissionMap
.
put
(
currentPermission
.
getName
(),
currentPermission
);
}
// Add command
addChangeCommand
(
new
PostgreCommandGrantPrivilege
(
getDatabaseObject
(),
grant
,
currentPermission
,
privilegeType
),
new
DBECommandReflector
<
PostgrePermissionsOwner
,
PostgreCommandGrantPrivilege
>()
{
@Override
public
void
redoCommand
(
PostgreCommandGrantPrivilege
cmd
)
{
// Add command
addChangeCommand
(
new
PostgreCommandGrantPrivilege
(
getDatabaseObject
(),
grant
,
permission
,
privilegeType
),
new
DBECommandReflector
<
PostgrePermissionsOwner
,
PostgreCommandGrantPrivilege
>()
{
@Override
public
void
redoCommand
(
PostgreCommandGrantPrivilege
cmd
)
{
// if (!privTable.isDisposed() && curCatalog == selectedCatalog && curTable == selectedTable) {
// privTable.checkPrivilege(privilege, isGrant);
// }
// updateLocalData(privilege, isGrant, curCatalog, curTable);
}
@Override
public
void
undoCommand
(
PostgreCommandGrantPrivilege
cmd
)
{
}
@Override
public
void
undoCommand
(
PostgreCommandGrantPrivilege
cmd
)
{
// if (!privTable.isDisposed() && curCatalog == selectedCatalog && curTable == selectedTable) {
// privTable.checkPrivilege(privilege, !isGrant);
// }
// updateLocalData(privilege, !isGrant, curCatalog, curTable);
}
});
}
});
}
}
private
void
updateObjectPermissions
(
List
<
DBSObject
>
objects
)
{
...
...
@@ -283,31 +291,47 @@ public class PostgresRolePrivilegesEditor extends AbstractDatabaseObjectEditor<P
objectNames
.
append
(
DBUtils
.
getObjectFullName
(
object
.
getDataSource
(),
object
,
DBPEvaluationContext
.
DML
));
}
}
boolean
editEnabled
;
if
(
hasBadObjects
)
{
objectDescriptionText
.
setText
(
"<no objects>"
);
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
=
currentPermission
s
[
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"
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录