Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
suliangchun
dbeaver
提交
c18f519c
D
dbeaver
项目概览
suliangchun
/
dbeaver
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
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,发现更多精彩内容 >>
提交
c18f519c
编写于
1月 15, 2017
作者:
S
Serge Rider
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
#1067 PG: table permissions panel
上级
1cd8bbe6
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
182 addition
and
19 deletion
+182
-19
plugins/org.jkiss.dbeaver.ext.postgresql/plugin.xml
plugins/org.jkiss.dbeaver.ext.postgresql/plugin.xml
+9
-5
plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgrePermission.java
...jkiss/dbeaver/ext/postgresql/model/PostgrePermission.java
+5
-1
plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreRolePermission.java
...s/dbeaver/ext/postgresql/model/PostgreRolePermission.java
+13
-4
plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreTableBase.java
.../jkiss/dbeaver/ext/postgresql/model/PostgreTableBase.java
+39
-3
plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreTablePermission.java
.../dbeaver/ext/postgresql/model/PostgreTablePermission.java
+72
-0
plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/ui/editors/PostgresRolePrivilegesEditor.java
...t/postgresql/ui/editors/PostgresRolePrivilegesEditor.java
+44
-6
未找到文件。
plugins/org.jkiss.dbeaver.ext.postgresql/plugin.xml
浏览文件 @
c18f519c
...
...
@@ -246,6 +246,15 @@
class=
"org.jkiss.dbeaver.ext.postgresql.edit.PostgreProcedureManager"
objectType=
"org.jkiss.dbeaver.ext.postgresql.model.PostgreProcedure"
/>
<editor
id=
"postgresql.role.permissions"
class=
"org.jkiss.dbeaver.ext.postgresql.ui.editors.PostgresRolePrivilegesEditor"
label=
"Permissions"
description=
"Permissions"
icon=
"#permissions"
position=
"additions_middle"
type=
"folder"
>
<objectType
name=
"org.jkiss.dbeaver.ext.postgresql.model.PostgreRole"
/>
<objectType
name=
"org.jkiss.dbeaver.ext.postgresql.model.PostgreTableBase"
/>
</editor>
<editor
id=
"postgresql.table.permissions"
class=
"org.jkiss.dbeaver.ext.postgresql.ui.editors.PostgresRolePrivilegesEditor"
label=
"Permissions"
description=
"Permissions"
icon=
"#permissions"
position=
"additions_middle"
type=
"editor"
>
<objectType
name=
"org.jkiss.dbeaver.ext.postgresql.model.PostgreTableBase"
/>
</editor>
<editor
id=
"postgresql.source.view"
class=
"org.jkiss.dbeaver.ext.postgresql.ui.editors.PostgreSourceViewEditor"
label=
"Source"
description=
"Source code"
icon=
"#sql_text"
position=
"additions_middle"
contributor=
"org.jkiss.dbeaver.ui.editors.sql.SQLEditorContributorNested"
type=
"folder"
embeddable=
"true"
>
...
...
@@ -259,11 +268,6 @@
contributor=
"org.jkiss.dbeaver.ui.editors.sql.SQLEditorContributorNested"
type=
"folder"
>
<objectType
name=
"org.jkiss.dbeaver.ext.postgresql.model.PostgreTable"
/>
</editor>
<editor
id=
"postgresql.role.permissions"
class=
"org.jkiss.dbeaver.ext.postgresql.ui.editors.PostgresRolePrivilegesEditor"
label=
"Permissions"
description=
"Permissions"
icon=
"#permissions"
position=
"additions_middle"
contributor=
"org.jkiss.dbeaver.ui.editors.sql.SQLEditorContributorNested"
type=
"folder"
>
<objectType
name=
"org.jkiss.dbeaver.ext.postgresql.model.PostgreRole"
/>
</editor>
</extension>
<extension
point=
"org.eclipse.ui.editors"
>
...
...
plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgrePermission.java
浏览文件 @
c18f519c
...
...
@@ -19,8 +19,10 @@ package org.jkiss.dbeaver.ext.postgresql.model;
import
org.jkiss.code.NotNull
;
import
org.jkiss.code.Nullable
;
import
org.jkiss.dbeaver.DBException
;
import
org.jkiss.dbeaver.model.DBPDataSource
;
import
org.jkiss.dbeaver.model.meta.Property
;
import
org.jkiss.dbeaver.model.runtime.DBRProgressMonitor
;
import
org.jkiss.dbeaver.model.struct.DBSObject
;
import
java.util.List
;
...
...
@@ -68,7 +70,7 @@ public abstract class PostgrePermission implements DBSObject, Comparable<Postgre
}
}
pr
ivate
final
PostgrePermissionsOwner
owner
;
pr
otected
final
PostgrePermissionsOwner
owner
;
private
ObjectPermission
[]
permissions
;
public
PostgrePermission
(
PostgrePermissionsOwner
owner
,
List
<
PostgrePrivilege
>
privileges
)
{
...
...
@@ -107,6 +109,8 @@ public abstract class PostgrePermission implements DBSObject, Comparable<Postgre
return
owner
.
getDataSource
();
}
public
abstract
PostgreObject
getTargetObject
(
DBRProgressMonitor
monitor
)
throws
DBException
;
public
ObjectPermission
[]
getPermissions
()
{
return
permissions
;
}
...
...
plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreRolePermission.java
浏览文件 @
c18f519c
...
...
@@ -19,6 +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.model.DBUtils
;
import
org.jkiss.dbeaver.model.meta.Property
;
import
org.jkiss.dbeaver.model.runtime.DBRProgressMonitor
;
...
...
@@ -30,6 +31,8 @@ import java.util.List;
*/
public
class
PostgreRolePermission
extends
PostgrePermission
{
private
static
final
Log
log
=
Log
.
getLog
(
PostgreRolePermission
.
class
);
private
String
schemaName
;
private
String
tableName
;
...
...
@@ -45,6 +48,16 @@ public class PostgreRolePermission extends PostgrePermission {
return
getFullTableName
();
}
@Override
public
PostgreTableBase
getTargetObject
(
DBRProgressMonitor
monitor
)
throws
DBException
{
final
PostgreSchema
schema
=
owner
.
getDatabase
().
getSchema
(
monitor
,
schemaName
);
if
(
schema
!=
null
)
{
return
schema
.
getChild
(
monitor
,
tableName
);
}
return
null
;
}
public
String
getSchemaName
()
{
return
schemaName
;
}
...
...
@@ -58,10 +71,6 @@ public class PostgreRolePermission extends PostgrePermission {
DBUtils
.
getQuotedIdentifier
(
getDataSource
(),
tableName
);
}
public
Object
getTable
(
DBRProgressMonitor
monitor
)
throws
DBException
{
return
getFullTableName
();
}
@Override
public
String
toString
()
{
return
getFullTableName
();
...
...
plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreTableBase.java
浏览文件 @
c18f519c
...
...
@@ -23,6 +23,9 @@ import org.jkiss.dbeaver.DBException;
import
org.jkiss.dbeaver.model.DBPEvaluationContext
;
import
org.jkiss.dbeaver.model.DBPNamedObject2
;
import
org.jkiss.dbeaver.model.DBUtils
;
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.jdbc.JDBCUtils
;
import
org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCStructCache
;
import
org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable
;
...
...
@@ -34,13 +37,13 @@ import org.jkiss.dbeaver.model.struct.DBSEntityAssociation;
import
org.jkiss.dbeaver.model.struct.DBSObject
;
import
java.sql.ResultSet
;
import
java.
util.Collec
tion
;
import
java.util.
List
;
import
java.
sql.SQLExcep
tion
;
import
java.util.
*
;
/**
* PostgreTable base
*/
public
abstract
class
PostgreTableBase
extends
JDBCTable
<
PostgreDataSource
,
PostgreSchema
>
implements
PostgreClass
,
PostgreScriptObject
,
DBPNamedObject2
public
abstract
class
PostgreTableBase
extends
JDBCTable
<
PostgreDataSource
,
PostgreSchema
>
implements
PostgreClass
,
PostgreScriptObject
,
PostgrePermissionsOwner
,
DBPNamedObject2
{
private
long
oid
;
private
String
description
;
...
...
@@ -162,4 +165,37 @@ public abstract class PostgreTableBase extends JDBCTable<PostgreDataSource, Post
return
getContainer
().
tableCache
.
refreshObject
(
monitor
,
getContainer
(),
this
);
}
@Override
public
Collection
<
PostgrePermission
>
getPermissions
(
DBRProgressMonitor
monitor
)
throws
DBException
{
try
(
JDBCSession
session
=
DBUtils
.
openMetaSession
(
monitor
,
getDataSource
(),
"Read table privileges"
))
{
try
(
JDBCPreparedStatement
dbStat
=
session
.
prepareStatement
(
"SELECT * FROM information_schema.table_privileges WHERE table_catalog=? AND table_schema=? AND table_name=?"
))
{
dbStat
.
setString
(
1
,
getDatabase
().
getName
());
dbStat
.
setString
(
2
,
getSchema
().
getName
());
dbStat
.
setString
(
3
,
getName
());
try
(
JDBCResultSet
dbResult
=
dbStat
.
executeQuery
())
{
Map
<
String
,
List
<
PostgrePrivilege
>>
privs
=
new
LinkedHashMap
<>();
while
(
dbResult
.
next
())
{
PostgrePrivilege
privilege
=
new
PostgrePrivilege
(
dbResult
);
List
<
PostgrePrivilege
>
privList
=
privs
.
get
(
privilege
.
getGrantee
());
if
(
privList
==
null
)
{
privList
=
new
ArrayList
<>();
privs
.
put
(
privilege
.
getGrantee
(),
privList
);
}
privList
.
add
(
privilege
);
}
// Pack to permission list
List
<
PostgrePermission
>
result
=
new
ArrayList
<>(
privs
.
size
());
for
(
List
<
PostgrePrivilege
>
priv
:
privs
.
values
())
{
result
.
add
(
new
PostgreTablePermission
(
this
,
priv
.
get
(
0
).
getGrantee
(),
priv
));
}
Collections
.
sort
(
result
);
return
result
;
}
}
catch
(
SQLException
e
)
{
throw
new
DBException
(
e
,
getDataSource
());
}
}
}
}
plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreTablePermission.java
0 → 100644
浏览文件 @
c18f519c
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2016 Serge Rieder (serge@jkiss.org)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License (version 2)
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
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.model.meta.Property
;
import
org.jkiss.dbeaver.model.runtime.DBRProgressMonitor
;
import
java.util.List
;
/**
* PostgreTablePermission
*/
public
class
PostgreTablePermission
extends
PostgrePermission
{
private
static
final
Log
log
=
Log
.
getLog
(
PostgreTablePermission
.
class
);
private
String
grantee
;
public
PostgreTablePermission
(
PostgrePermissionsOwner
owner
,
String
grantee
,
List
<
PostgrePrivilege
>
privileges
)
{
super
(
owner
,
privileges
);
this
.
grantee
=
grantee
;
}
@Property
(
viewable
=
true
,
order
=
1
)
@NotNull
public
String
getName
()
{
return
grantee
;
}
@Override
public
PostgreRole
getTargetObject
(
DBRProgressMonitor
monitor
)
throws
DBException
{
return
owner
.
getDatabase
().
roleCache
.
getObject
(
monitor
,
owner
.
getDatabase
(),
grantee
);
}
public
String
getGrantee
()
{
return
grantee
;
}
@Override
public
String
toString
()
{
return
getName
();
}
@Override
public
int
compareTo
(
@NotNull
PostgrePermission
o
)
{
if
(
o
instanceof
PostgreTablePermission
)
{
return
grantee
.
compareTo
(((
PostgreTablePermission
)
o
).
grantee
);
}
return
0
;
}
}
plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/ui/editors/PostgresRolePrivilegesEditor.java
浏览文件 @
c18f519c
...
...
@@ -17,7 +17,12 @@
*/
package
org.jkiss.dbeaver.ext.postgresql.ui.editors
;
import
org.eclipse.jface.viewers.TreeViewer
;
import
org.eclipse.core.runtime.IStatus
;
import
org.eclipse.core.runtime.Status
;
import
org.eclipse.jface.viewers.DoubleClickEvent
;
import
org.eclipse.jface.viewers.IDoubleClickListener
;
import
org.eclipse.jface.viewers.ISelection
;
import
org.eclipse.jface.viewers.IStructuredSelection
;
import
org.eclipse.swt.SWT
;
import
org.eclipse.swt.events.DisposeEvent
;
import
org.eclipse.swt.events.DisposeListener
;
...
...
@@ -27,19 +32,22 @@ 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.model.PostgrePermission
;
import
org.jkiss.dbeaver.
ext.postgresql.model.PostgrePermissionsOwner
;
import
org.jkiss.dbeaver.ext.postgresql.model.
PostgreRole
;
import
org.jkiss.dbeaver.
core.DBeaverCore
;
import
org.jkiss.dbeaver.
core.DBeaverUI
;
import
org.jkiss.dbeaver.ext.postgresql.model.
*
;
import
org.jkiss.dbeaver.model.DBIcon
;
import
org.jkiss.dbeaver.model.DBPImage
;
import
org.jkiss.dbeaver.model.navigator.DBNDatabaseNode
;
import
org.jkiss.dbeaver.model.runtime.AbstractJob
;
import
org.jkiss.dbeaver.model.runtime.DBRProgressMonitor
;
import
org.jkiss.dbeaver.model.runtime.load.DatabaseLoadService
;
import
org.jkiss.dbeaver.ui.LoadingJob
;
import
org.jkiss.dbeaver.ui.UIUtils
;
import
org.jkiss.dbeaver.ui.
controls.ProgressPageControl
;
import
org.jkiss.dbeaver.ui.
actions.navigator.NavigatorHandlerObjectOpen
;
import
org.jkiss.dbeaver.ui.controls.TreeContentProvider
;
import
org.jkiss.dbeaver.ui.controls.itemlist.DatabaseObjectListControl
;
import
org.jkiss.dbeaver.ui.editors.AbstractDatabaseObjectEditor
;
import
org.jkiss.dbeaver.utils.GeneralUtils
;
import
java.lang.reflect.InvocationTargetException
;
import
java.util.Collection
;
...
...
@@ -71,6 +79,34 @@ public class PostgresRolePrivilegesEditor extends AbstractDatabaseObjectEditor<P
this
.
pageControl
=
new
PageControl
(
parent
);
this
.
pageControl
.
createOrSubstituteProgressPanel
(
getSite
());
this
.
pageControl
.
setDoubleClickHandler
(
new
IDoubleClickListener
()
{
@Override
public
void
doubleClick
(
DoubleClickEvent
event
)
{
final
ISelection
selection
=
pageControl
.
getSelectionProvider
().
getSelection
();
if
(!
selection
.
isEmpty
()
&&
selection
instanceof
IStructuredSelection
)
{
final
PostgrePermission
element
=
(
PostgrePermission
)
((
IStructuredSelection
)
selection
).
getFirstElement
();
new
AbstractJob
(
"Open target object"
)
{
@Override
protected
IStatus
run
(
DBRProgressMonitor
monitor
)
{
try
{
final
PostgreObject
targetObject
=
element
.
getTargetObject
(
monitor
);
if
(
targetObject
!=
null
)
{
DBeaverUI
.
syncExec
(
new
Runnable
()
{
@Override
public
void
run
()
{
NavigatorHandlerObjectOpen
.
openEntityEditor
(
targetObject
);
}
});
}
}
catch
(
DBException
e
)
{
return
GeneralUtils
.
makeExceptionStatus
(
e
);
}
return
Status
.
OK_STATUS
;
}
}.
schedule
();
}
}
});
}
private
boolean
isRoleEditor
()
{
...
...
@@ -78,7 +114,9 @@ public class PostgresRolePrivilegesEditor extends AbstractDatabaseObjectEditor<P
}
@Override
public
void
setFocus
()
{
if
(
this
.
pageControl
!=
null
)
{
this
.
pageControl
.
setFocus
();
}
}
@Override
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录