Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
wrr-cat
apollo
提交
d1db52ab
apollo
项目概览
wrr-cat
/
apollo
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
apollo
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d1db52ab
编写于
7月 22, 2018
作者:
N
nobodyiam
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add delete app namespace api
上级
d23e60e1
变更
22
隐藏空白更改
内联
并排
Showing
22 changed file
with
227 addition
and
60 deletion
+227
-60
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/AppNamespaceController.java
...pollo/adminservice/controller/AppNamespaceController.java
+10
-0
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/AppNamespaceRepository.java
...amework/apollo/biz/repository/AppNamespaceRepository.java
+4
-0
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/GrayReleaseRuleRepository.java
...work/apollo/biz/repository/GrayReleaseRuleRepository.java
+0
-3
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/NamespaceRepository.java
.../framework/apollo/biz/repository/NamespaceRepository.java
+1
-1
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/AdminService.java
.../com/ctrip/framework/apollo/biz/service/AdminService.java
+0
-1
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/AppNamespaceService.java
...rip/framework/apollo/biz/service/AppNamespaceService.java
+24
-0
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/ClusterService.java
...om/ctrip/framework/apollo/biz/service/ClusterService.java
+10
-1
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/GrayReleaseRuleService.java
.../framework/apollo/biz/service/GrayReleaseRuleService.java
+0
-18
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/NamespaceService.java
.../ctrip/framework/apollo/biz/service/NamespaceService.java
+11
-14
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/api/AdminServiceAPI.java
...om/ctrip/framework/apollo/portal/api/AdminServiceAPI.java
+4
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/NamespaceController.java
...amework/apollo/portal/controller/NamespaceController.java
+12
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/listener/AppInfoChangedListener.java
...mework/apollo/portal/listener/AppInfoChangedListener.java
+0
-17
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/listener/AppNamespaceDeletionEvent.java
...ork/apollo/portal/listener/AppNamespaceDeletionEvent.java
+17
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/listener/DeletionListener.java
...ip/framework/apollo/portal/listener/DeletionListener.java
+64
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/repository/AppNamespaceRepository.java
...work/apollo/portal/repository/AppNamespaceRepository.java
+4
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/repository/PermissionRepository.java
...mework/apollo/portal/repository/PermissionRepository.java
+3
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/repository/RoleRepository.java
...ip/framework/apollo/portal/repository/RoleRepository.java
+4
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppNamespaceService.java
.../framework/apollo/portal/service/AppNamespaceService.java
+24
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppService.java
...com/ctrip/framework/apollo/portal/service/AppService.java
+1
-1
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/NamespaceService.java
...rip/framework/apollo/portal/service/NamespaceService.java
+2
-1
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/RolePermissionService.java
...ramework/apollo/portal/service/RolePermissionService.java
+5
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/defaultimpl/DefaultRolePermissionService.java
.../portal/spi/defaultimpl/DefaultRolePermissionService.java
+27
-3
未找到文件。
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/AppNamespaceController.java
浏览文件 @
d1db52ab
...
@@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.PathVariable;
...
@@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.PathVariable;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.List
;
import
java.util.List
;
...
@@ -46,7 +47,16 @@ public class AppNamespaceController {
...
@@ -46,7 +47,16 @@ public class AppNamespaceController {
entity
=
appNamespaceService
.
createAppNamespace
(
entity
);
entity
=
appNamespaceService
.
createAppNamespace
(
entity
);
return
BeanUtils
.
transfrom
(
AppNamespaceDTO
.
class
,
entity
);
return
BeanUtils
.
transfrom
(
AppNamespaceDTO
.
class
,
entity
);
}
@RequestMapping
(
value
=
"/apps/{appId}/appnamespaces/{namespaceName:.+}"
,
method
=
RequestMethod
.
DELETE
)
public
void
delete
(
@PathVariable
(
"appId"
)
String
appId
,
@PathVariable
(
"namespaceName"
)
String
namespaceName
,
@RequestParam
String
operator
)
{
AppNamespace
entity
=
appNamespaceService
.
findOne
(
appId
,
namespaceName
);
if
(
entity
==
null
)
{
throw
new
BadRequestException
(
"app namespace not found for appId: "
+
appId
+
" namespace: "
+
namespaceName
);
}
appNamespaceService
.
deleteAppNamespace
(
entity
,
operator
);
}
}
@RequestMapping
(
value
=
"/appnamespaces/{publicNamespaceName}/namespaces"
,
method
=
RequestMethod
.
GET
)
@RequestMapping
(
value
=
"/appnamespaces/{publicNamespaceName}/namespaces"
,
method
=
RequestMethod
.
GET
)
...
...
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/AppNamespaceRepository.java
浏览文件 @
d1db52ab
...
@@ -29,4 +29,8 @@ public interface AppNamespaceRepository extends PagingAndSortingRepository<AppNa
...
@@ -29,4 +29,8 @@ public interface AppNamespaceRepository extends PagingAndSortingRepository<AppNa
@Modifying
@Modifying
@Query
(
"UPDATE AppNamespace SET IsDeleted=1,DataChange_LastModifiedBy = ?2 WHERE AppId=?1"
)
@Query
(
"UPDATE AppNamespace SET IsDeleted=1,DataChange_LastModifiedBy = ?2 WHERE AppId=?1"
)
int
batchDeleteByAppId
(
String
appId
,
String
operator
);
int
batchDeleteByAppId
(
String
appId
,
String
operator
);
@Modifying
@Query
(
"UPDATE AppNamespace SET IsDeleted=1,DataChange_LastModifiedBy = ?3 WHERE AppId=?1 and Name = ?2"
)
int
delete
(
String
appId
,
String
namespaceName
,
String
operator
);
}
}
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/GrayReleaseRuleRepository.java
浏览文件 @
d1db52ab
...
@@ -19,7 +19,4 @@ public interface GrayReleaseRuleRepository extends PagingAndSortingRepository<Gr
...
@@ -19,7 +19,4 @@ public interface GrayReleaseRuleRepository extends PagingAndSortingRepository<Gr
List
<
GrayReleaseRule
>
findFirst500ByIdGreaterThanOrderByIdAsc
(
Long
id
);
List
<
GrayReleaseRule
>
findFirst500ByIdGreaterThanOrderByIdAsc
(
Long
id
);
@Modifying
@Query
(
"UPDATE GrayReleaseRule SET IsDeleted=1, DataChange_LastModifiedBy = ?4 where appId=?1 and clusterName=?2 and namespaceName = ?3"
)
int
batchDelete
(
String
appId
,
String
clusterName
,
String
namespaceName
,
String
operator
);
}
}
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/NamespaceRepository.java
浏览文件 @
d1db52ab
...
@@ -19,7 +19,7 @@ public interface NamespaceRepository extends PagingAndSortingRepository<Namespac
...
@@ -19,7 +19,7 @@ public interface NamespaceRepository extends PagingAndSortingRepository<Namespac
@Query
(
"update Namespace set isdeleted=1,DataChange_LastModifiedBy = ?3 where appId=?1 and clusterName=?2"
)
@Query
(
"update Namespace set isdeleted=1,DataChange_LastModifiedBy = ?3 where appId=?1 and clusterName=?2"
)
int
batchDelete
(
String
appId
,
String
clusterName
,
String
operator
);
int
batchDelete
(
String
appId
,
String
clusterName
,
String
operator
);
List
<
Namespace
>
findByAppIdAndNamespaceName
(
String
appId
,
String
namespaceName
);
List
<
Namespace
>
findByAppIdAndNamespaceName
OrderByIdAsc
(
String
appId
,
String
namespaceName
);
List
<
Namespace
>
findByNamespaceName
(
String
namespaceName
,
Pageable
page
);
List
<
Namespace
>
findByNamespaceName
(
String
namespaceName
,
Pageable
page
);
...
...
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/AdminService.java
浏览文件 @
d1db52ab
...
@@ -2,7 +2,6 @@ package com.ctrip.framework.apollo.biz.service;
...
@@ -2,7 +2,6 @@ package com.ctrip.framework.apollo.biz.service;
import
com.ctrip.framework.apollo.biz.entity.Cluster
;
import
com.ctrip.framework.apollo.biz.entity.Cluster
;
import
com.ctrip.framework.apollo.common.entity.App
;
import
com.ctrip.framework.apollo.common.entity.App
;
import
com.ctrip.framework.apollo.common.exception.NotFoundException
;
import
com.ctrip.framework.apollo.core.ConfigConsts
;
import
com.ctrip.framework.apollo.core.ConfigConsts
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
...
...
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/AppNamespaceService.java
浏览文件 @
d1db52ab
...
@@ -14,6 +14,8 @@ import com.ctrip.framework.apollo.core.ConfigConsts;
...
@@ -14,6 +14,8 @@ import com.ctrip.framework.apollo.core.ConfigConsts;
import
com.ctrip.framework.apollo.core.enums.ConfigFileFormat
;
import
com.ctrip.framework.apollo.core.enums.ConfigFileFormat
;
import
com.ctrip.framework.apollo.core.utils.StringUtils
;
import
com.ctrip.framework.apollo.core.utils.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
...
@@ -26,6 +28,8 @@ import java.util.Set;
...
@@ -26,6 +28,8 @@ import java.util.Set;
@Service
@Service
public
class
AppNamespaceService
{
public
class
AppNamespaceService
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
AppNamespaceService
.
class
);
@Autowired
@Autowired
private
AppNamespaceRepository
appNamespaceRepository
;
private
AppNamespaceRepository
appNamespaceRepository
;
@Autowired
@Autowired
...
@@ -142,4 +146,24 @@ public class AppNamespaceService {
...
@@ -142,4 +146,24 @@ public class AppNamespaceService {
public
void
batchDelete
(
String
appId
,
String
operator
)
{
public
void
batchDelete
(
String
appId
,
String
operator
)
{
appNamespaceRepository
.
batchDeleteByAppId
(
appId
,
operator
);
appNamespaceRepository
.
batchDeleteByAppId
(
appId
,
operator
);
}
}
@Transactional
public
void
deleteAppNamespace
(
AppNamespace
appNamespace
,
String
operator
)
{
String
appId
=
appNamespace
.
getAppId
();
String
namespaceName
=
appNamespace
.
getName
();
logger
.
info
(
"{} is deleting AppNamespace, appId: {}, namespace: {}"
,
operator
,
appId
,
namespaceName
);
// 1. delete namespaces
List
<
Namespace
>
namespaces
=
namespaceService
.
findByAppIdAndNamespaceName
(
appId
,
namespaceName
);
if
(
namespaces
!=
null
)
{
for
(
Namespace
namespace
:
namespaces
)
{
namespaceService
.
deleteNamespace
(
namespace
,
operator
);
}
}
// 2. delete app namespace
appNamespaceRepository
.
delete
(
appId
,
namespaceName
,
operator
);
}
}
}
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/ClusterService.java
浏览文件 @
d1db52ab
...
@@ -138,6 +138,15 @@ public class ClusterService {
...
@@ -138,6 +138,15 @@ public class ClusterService {
}
}
public
List
<
Cluster
>
findClusters
(
String
appId
)
{
public
List
<
Cluster
>
findClusters
(
String
appId
)
{
return
clusterRepository
.
findByAppId
(
appId
);
List
<
Cluster
>
clusters
=
clusterRepository
.
findByAppId
(
appId
);
if
(
clusters
==
null
)
{
return
Collections
.
emptyList
();
}
// to make sure parent cluster is ahead of branch cluster
Collections
.
sort
(
clusters
);
return
clusters
;
}
}
}
}
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/GrayReleaseRuleService.java
已删除
100644 → 0
浏览文件 @
d23e60e1
package
com.ctrip.framework.apollo.biz.service
;
import
com.ctrip.framework.apollo.biz.repository.GrayReleaseRuleRepository
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
@Service
public
class
GrayReleaseRuleService
{
@Autowired
private
GrayReleaseRuleRepository
grayReleaseRuleRepository
;
@Transactional
public
void
batchDelete
(
String
appId
,
String
clusterName
,
String
namespaceName
,
String
operator
)
{
grayReleaseRuleRepository
.
batchDelete
(
appId
,
clusterName
,
namespaceName
,
operator
);
}
}
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/NamespaceService.java
浏览文件 @
d1db52ab
...
@@ -59,8 +59,6 @@ public class NamespaceService {
...
@@ -59,8 +59,6 @@ public class NamespaceService {
@Autowired
@Autowired
private
ReleaseHistoryService
releaseHistoryService
;
private
ReleaseHistoryService
releaseHistoryService
;
@Autowired
@Autowired
private
GrayReleaseRuleService
grayReleaseRuleService
;
@Autowired
private
NamespaceLockService
namespaceLockService
;
private
NamespaceLockService
namespaceLockService
;
@Autowired
@Autowired
private
InstanceService
instanceService
;
private
InstanceService
instanceService
;
...
@@ -177,7 +175,7 @@ public class NamespaceService {
...
@@ -177,7 +175,7 @@ public class NamespaceService {
}
}
public
List
<
Namespace
>
findByAppIdAndNamespaceName
(
String
appId
,
String
namespaceName
)
{
public
List
<
Namespace
>
findByAppIdAndNamespaceName
(
String
appId
,
String
namespaceName
)
{
return
namespaceRepository
.
findByAppIdAndNamespaceName
(
appId
,
namespaceName
);
return
namespaceRepository
.
findByAppIdAndNamespaceName
OrderByIdAsc
(
appId
,
namespaceName
);
}
}
public
Namespace
findChildNamespace
(
String
appId
,
String
parentClusterName
,
String
namespaceName
)
{
public
Namespace
findChildNamespace
(
String
appId
,
String
parentClusterName
,
String
namespaceName
)
{
...
@@ -266,17 +264,14 @@ public class NamespaceService {
...
@@ -266,17 +264,14 @@ public class NamespaceService {
commitService
.
batchDelete
(
appId
,
clusterName
,
namespace
.
getNamespaceName
(),
operator
);
commitService
.
batchDelete
(
appId
,
clusterName
,
namespace
.
getNamespaceName
(),
operator
);
releaseService
.
batchDelete
(
appId
,
clusterName
,
namespace
.
getNamespaceName
(),
operator
);
releaseService
.
batchDelete
(
appId
,
clusterName
,
namespace
.
getNamespaceName
(),
operator
);
grayReleaseRuleService
.
batchDelete
(
appId
,
clusterName
,
namespace
.
getNamespaceName
(),
operator
);
//delete child namespace
if
(!
isChildNamespace
(
namespace
))
{
Namespace
childNamespace
=
findChildNamespace
(
namespace
);
//delete child namespace
if
(
childNamespace
!=
null
)
{
Namespace
childNamespace
=
findChildNamespace
(
namespace
);
namespaceBranchService
.
deleteBranch
(
appId
,
clusterName
,
namespaceName
,
if
(
childNamespace
!=
null
)
{
childNamespace
.
getClusterName
(),
NamespaceBranchStatus
.
DELETED
,
operator
);
namespaceBranchService
.
deleteBranch
(
appId
,
clusterName
,
namespaceName
,
//delete child namespace's releases. Notice: delete child namespace will not delete child namespace's releases
childNamespace
.
getClusterName
(),
NamespaceBranchStatus
.
DELETED
,
operator
);
releaseService
.
batchDelete
(
appId
,
childNamespace
.
getClusterName
(),
namespaceName
,
operator
);
//delete child namespace's releases. Notice: delete child namespace will not delete child namespace's releases
releaseService
.
batchDelete
(
appId
,
childNamespace
.
getClusterName
(),
namespaceName
,
operator
);
}
}
}
releaseHistoryService
.
batchDelete
(
appId
,
clusterName
,
namespaceName
,
operator
);
releaseHistoryService
.
batchDelete
(
appId
,
clusterName
,
namespaceName
,
operator
);
...
@@ -397,4 +392,6 @@ public class NamespaceService {
...
@@ -397,4 +392,6 @@ public class NamespaceService {
return
false
;
return
false
;
}
}
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/api/AdminServiceAPI.java
浏览文件 @
d1db52ab
...
@@ -132,6 +132,10 @@ public class AdminServiceAPI {
...
@@ -132,6 +132,10 @@ public class AdminServiceAPI {
return
count
==
null
?
0
:
count
;
return
count
==
null
?
0
:
count
;
}
}
public
void
deleteAppNamespace
(
Env
env
,
String
appId
,
String
namespaceName
,
String
operator
)
{
restTemplate
.
delete
(
env
,
"/apps/{appId}/appnamespaces/{namespaceName}?operator={operator}"
,
appId
,
namespaceName
,
operator
);
}
}
}
@Service
@Service
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/NamespaceController.java
浏览文件 @
d1db52ab
package
com.ctrip.framework.apollo.portal.controller
;
package
com.ctrip.framework.apollo.portal.controller
;
import
com.ctrip.framework.apollo.portal.listener.AppNamespaceDeletionEvent
;
import
com.google.common.collect.Sets
;
import
com.google.common.collect.Sets
;
import
com.ctrip.framework.apollo.common.dto.NamespaceDTO
;
import
com.ctrip.framework.apollo.common.dto.NamespaceDTO
;
...
@@ -132,6 +133,17 @@ public class NamespaceController {
...
@@ -132,6 +133,17 @@ public class NamespaceController {
return
ResponseEntity
.
ok
().
build
();
return
ResponseEntity
.
ok
().
build
();
}
}
@PreAuthorize
(
value
=
"@permissionValidator.isSuperAdmin()"
)
@RequestMapping
(
value
=
"/apps/{appId}/appnamespaces/{namespaceName:.+}"
,
method
=
RequestMethod
.
DELETE
)
public
ResponseEntity
<
Void
>
deleteAppNamespace
(
@PathVariable
String
appId
,
@PathVariable
String
namespaceName
)
{
AppNamespace
appNamespace
=
appNamespaceService
.
deleteAppNamespace
(
appId
,
namespaceName
);
publisher
.
publishEvent
(
new
AppNamespaceDeletionEvent
(
appNamespace
));
return
ResponseEntity
.
ok
().
build
();
}
@PreAuthorize
(
value
=
"@permissionValidator.hasCreateAppNamespacePermission(#appId, #appNamespace)"
)
@PreAuthorize
(
value
=
"@permissionValidator.hasCreateAppNamespacePermission(#appId, #appNamespace)"
)
@RequestMapping
(
value
=
"/apps/{appId}/appnamespaces"
,
method
=
RequestMethod
.
POST
)
@RequestMapping
(
value
=
"/apps/{appId}/appnamespaces"
,
method
=
RequestMethod
.
POST
)
public
AppNamespace
createAppNamespace
(
@PathVariable
String
appId
,
@RequestBody
AppNamespace
appNamespace
)
{
public
AppNamespace
createAppNamespace
(
@PathVariable
String
appId
,
@RequestBody
AppNamespace
appNamespace
)
{
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/listener/AppInfoChangedListener.java
浏览文件 @
d1db52ab
...
@@ -40,21 +40,4 @@ public class AppInfoChangedListener {
...
@@ -40,21 +40,4 @@ public class AppInfoChangedListener {
}
}
}
}
}
}
@EventListener
public
void
onAppDelete
(
AppDeletionEvent
event
)
{
AppDTO
appDTO
=
BeanUtils
.
transfrom
(
AppDTO
.
class
,
event
.
getApp
());
String
appId
=
appDTO
.
getAppId
();
String
operator
=
appDTO
.
getDataChangeLastModifiedBy
();
List
<
Env
>
envs
=
portalSettings
.
getActiveEnvs
();
for
(
Env
env
:
envs
)
{
try
{
appAPI
.
deleteApp
(
env
,
appId
,
operator
);
}
catch
(
Throwable
e
)
{
logger
.
error
(
"Delete app failed. Env = {}, AppId = {}"
,
env
,
appId
,
e
);
Tracer
.
logError
(
String
.
format
(
"Delete app failed. Env = %s, AppId = %s"
,
env
,
appId
),
e
);
}
}
}
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/listener/AppNamespaceDeletionEvent.java
0 → 100644
浏览文件 @
d1db52ab
package
com.ctrip.framework.apollo.portal.listener
;
import
com.ctrip.framework.apollo.common.entity.AppNamespace
;
import
com.google.common.base.Preconditions
;
import
org.springframework.context.ApplicationEvent
;
public
class
AppNamespaceDeletionEvent
extends
ApplicationEvent
{
public
AppNamespaceDeletionEvent
(
Object
source
)
{
super
(
source
);
}
public
AppNamespace
getAppNamespace
()
{
Preconditions
.
checkState
(
source
!=
null
);
return
(
AppNamespace
)
this
.
source
;
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/listener/DeletionListener.java
0 → 100644
浏览文件 @
d1db52ab
package
com.ctrip.framework.apollo.portal.listener
;
import
com.ctrip.framework.apollo.common.dto.AppDTO
;
import
com.ctrip.framework.apollo.common.dto.AppNamespaceDTO
;
import
com.ctrip.framework.apollo.common.utils.BeanUtils
;
import
com.ctrip.framework.apollo.core.enums.Env
;
import
com.ctrip.framework.apollo.portal.api.AdminServiceAPI
;
import
com.ctrip.framework.apollo.portal.component.PortalSettings
;
import
com.ctrip.framework.apollo.tracer.Tracer
;
import
java.util.List
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.event.EventListener
;
import
org.springframework.stereotype.Component
;
@Component
public
class
DeletionListener
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
DeletionListener
.
class
);
@Autowired
private
PortalSettings
portalSettings
;
@Autowired
private
AdminServiceAPI
.
AppAPI
appAPI
;
@Autowired
private
AdminServiceAPI
.
NamespaceAPI
namespaceAPI
;
@EventListener
public
void
onAppDeletionEvent
(
AppDeletionEvent
event
)
{
AppDTO
appDTO
=
BeanUtils
.
transfrom
(
AppDTO
.
class
,
event
.
getApp
());
String
appId
=
appDTO
.
getAppId
();
String
operator
=
appDTO
.
getDataChangeLastModifiedBy
();
List
<
Env
>
envs
=
portalSettings
.
getActiveEnvs
();
for
(
Env
env
:
envs
)
{
try
{
appAPI
.
deleteApp
(
env
,
appId
,
operator
);
}
catch
(
Throwable
e
)
{
logger
.
error
(
"Delete app failed. Env = {}, AppId = {}"
,
env
,
appId
,
e
);
Tracer
.
logError
(
String
.
format
(
"Delete app failed. Env = %s, AppId = %s"
,
env
,
appId
),
e
);
}
}
}
@EventListener
public
void
onAppNamespaceDeletionEvent
(
AppNamespaceDeletionEvent
event
)
{
AppNamespaceDTO
appNamespace
=
BeanUtils
.
transfrom
(
AppNamespaceDTO
.
class
,
event
.
getAppNamespace
());
List
<
Env
>
envs
=
portalSettings
.
getActiveEnvs
();
String
appId
=
appNamespace
.
getAppId
();
String
namespaceName
=
appNamespace
.
getName
();
String
operator
=
appNamespace
.
getDataChangeLastModifiedBy
();
for
(
Env
env
:
envs
)
{
try
{
namespaceAPI
.
deleteAppNamespace
(
env
,
appId
,
namespaceName
,
operator
);
}
catch
(
Throwable
e
)
{
logger
.
error
(
"Delete appNamespace failed. appId = {}, namespace = {}, env = {}"
,
appId
,
namespaceName
,
env
,
e
);
Tracer
.
logError
(
String
.
format
(
"Delete appNamespace failed. appId = %s, namespace = %s, env = %s"
,
appId
,
namespaceName
,
env
),
e
);
}
}
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/repository/AppNamespaceRepository.java
浏览文件 @
d1db52ab
...
@@ -19,4 +19,8 @@ public interface AppNamespaceRepository extends PagingAndSortingRepository<AppNa
...
@@ -19,4 +19,8 @@ public interface AppNamespaceRepository extends PagingAndSortingRepository<AppNa
@Modifying
@Modifying
@Query
(
"UPDATE AppNamespace SET IsDeleted=1,DataChange_LastModifiedBy=?2 WHERE AppId=?1"
)
@Query
(
"UPDATE AppNamespace SET IsDeleted=1,DataChange_LastModifiedBy=?2 WHERE AppId=?1"
)
int
batchDeleteByAppId
(
String
appId
,
String
operator
);
int
batchDeleteByAppId
(
String
appId
,
String
operator
);
@Modifying
@Query
(
"UPDATE AppNamespace SET IsDeleted=1,DataChange_LastModifiedBy = ?3 WHERE AppId=?1 and Name = ?2"
)
int
delete
(
String
appId
,
String
namespaceName
,
String
operator
);
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/repository/PermissionRepository.java
浏览文件 @
d1db52ab
...
@@ -28,6 +28,9 @@ public interface PermissionRepository extends PagingAndSortingRepository<Permiss
...
@@ -28,6 +28,9 @@ public interface PermissionRepository extends PagingAndSortingRepository<Permiss
@Query
(
"SELECT p.id from Permission p where p.targetId = ?1 or p.targetId like CONCAT(?1, '+%'))"
)
@Query
(
"SELECT p.id from Permission p where p.targetId = ?1 or p.targetId like CONCAT(?1, '+%'))"
)
List
<
Long
>
findPermissionIdsByAppId
(
String
appId
);
List
<
Long
>
findPermissionIdsByAppId
(
String
appId
);
@Query
(
"SELECT p.id from Permission p where p.targetId = CONCAT(?1, '+', ?2)"
)
List
<
Long
>
findPermissionIdsByAppIdAndNamespace
(
String
appId
,
String
namespaceName
);
@Modifying
@Modifying
@Query
(
"UPDATE Permission SET IsDeleted=1, DataChange_LastModifiedBy = ?2 WHERE Id in ?1"
)
@Query
(
"UPDATE Permission SET IsDeleted=1, DataChange_LastModifiedBy = ?2 WHERE Id in ?1"
)
Integer
batchDelete
(
List
<
Long
>
permissionIds
,
String
operator
);
Integer
batchDelete
(
List
<
Long
>
permissionIds
,
String
operator
);
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/repository/RoleRepository.java
浏览文件 @
d1db52ab
...
@@ -22,6 +22,10 @@ public interface RoleRepository extends PagingAndSortingRepository<Role, Long> {
...
@@ -22,6 +22,10 @@ public interface RoleRepository extends PagingAndSortingRepository<Role, Long> {
+
"OR r.roleName like CONCAT('ReleaseNamespace+', ?1, '+%'))"
)
+
"OR r.roleName like CONCAT('ReleaseNamespace+', ?1, '+%'))"
)
List
<
Long
>
findRoleIdsByAppId
(
String
appId
);
List
<
Long
>
findRoleIdsByAppId
(
String
appId
);
@Query
(
"SELECT r.id from Role r where (r.roleName = CONCAT('ModifyNamespace+', ?1, '+', ?2) "
+
"OR r.roleName = CONCAT('ReleaseNamespace+', ?1, '+', ?2))"
)
List
<
Long
>
findRoleIdsByAppIdAndNamespace
(
String
appId
,
String
namespaceName
);
@Modifying
@Modifying
@Query
(
"UPDATE Role SET IsDeleted=1, DataChange_LastModifiedBy = ?2 WHERE Id in ?1"
)
@Query
(
"UPDATE Role SET IsDeleted=1, DataChange_LastModifiedBy = ?2 WHERE Id in ?1"
)
Integer
batchDelete
(
List
<
Long
>
roleIds
,
String
operator
);
Integer
batchDelete
(
List
<
Long
>
roleIds
,
String
operator
);
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppNamespaceService.java
浏览文件 @
d1db52ab
...
@@ -27,6 +27,8 @@ public class AppNamespaceService {
...
@@ -27,6 +27,8 @@ public class AppNamespaceService {
private
RoleInitializationService
roleInitializationService
;
private
RoleInitializationService
roleInitializationService
;
@Autowired
@Autowired
private
AppService
appService
;
private
AppService
appService
;
@Autowired
private
RolePermissionService
rolePermissionService
;
/**
/**
* 公共的app ns,能被其它项目关联到的app ns
* 公共的app ns,能被其它项目关联到的app ns
...
@@ -118,6 +120,28 @@ public class AppNamespaceService {
...
@@ -118,6 +120,28 @@ public class AppNamespaceService {
return
createdAppNamespace
;
return
createdAppNamespace
;
}
}
@Transactional
public
AppNamespace
deleteAppNamespace
(
String
appId
,
String
namespaceName
)
{
AppNamespace
appNamespace
=
appNamespaceRepository
.
findByAppIdAndName
(
appId
,
namespaceName
);
if
(
appNamespace
==
null
)
{
throw
new
BadRequestException
(
String
.
format
(
"AppNamespace not exists. AppId = %s, NamespaceName = %s"
,
appId
,
namespaceName
));
}
String
operator
=
userInfoHolder
.
getUser
().
getUserId
();
// this operator is passed to com.ctrip.framework.apollo.portal.listener.DeletionListener.onAppNamespaceDeletionEvent
appNamespace
.
setDataChangeLastModifiedBy
(
operator
);
// delete app namespace in portal db
appNamespaceRepository
.
delete
(
appId
,
namespaceName
,
operator
);
// delete Permission and Role related data
rolePermissionService
.
deleteRolePermissionsByAppIdAndNamespace
(
appId
,
namespaceName
,
operator
);
return
appNamespace
;
}
public
void
batchDeleteByAppId
(
String
appId
,
String
operator
)
{
public
void
batchDeleteByAppId
(
String
appId
,
String
operator
)
{
appNamespaceRepository
.
batchDeleteByAppId
(
appId
,
operator
);
appNamespaceRepository
.
batchDeleteByAppId
(
appId
,
operator
);
}
}
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppService.java
浏览文件 @
d1db52ab
...
@@ -151,7 +151,7 @@ public class AppService {
...
@@ -151,7 +151,7 @@ public class AppService {
}
}
String
operator
=
userInfoHolder
.
getUser
().
getUserId
();
String
operator
=
userInfoHolder
.
getUser
().
getUserId
();
//this operator is passed to com.ctrip.framework.apollo.portal.listener.
AppInfoChangedListener.onAppDelete
//this operator is passed to com.ctrip.framework.apollo.portal.listener.
DeletionListener.onAppDeletionEvent
managedApp
.
setDataChangeLastModifiedBy
(
operator
);
managedApp
.
setDataChangeLastModifiedBy
(
operator
);
//删除portal数据库中的app
//删除portal数据库中的app
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/NamespaceService.java
浏览文件 @
d1db52ab
...
@@ -238,8 +238,9 @@ public class NamespaceService {
...
@@ -238,8 +238,9 @@ public class NamespaceService {
String
format
;
String
format
;
boolean
isPublic
;
boolean
isPublic
;
if
(
appNamespace
==
null
)
{
if
(
appNamespace
==
null
)
{
//dirty data
format
=
ConfigFileFormat
.
Properties
.
getValue
();
format
=
ConfigFileFormat
.
Properties
.
getValue
();
isPublic
=
false
;
isPublic
=
true
;
// set to true, because public namespace allowed to delete by user
}
else
{
}
else
{
format
=
appNamespace
.
getFormat
();
format
=
appNamespace
.
getFormat
();
isPublic
=
appNamespace
.
isPublic
();
isPublic
=
appNamespace
.
isPublic
();
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/RolePermissionService.java
浏览文件 @
d1db52ab
...
@@ -60,4 +60,9 @@ public interface RolePermissionService {
...
@@ -60,4 +60,9 @@ public interface RolePermissionService {
* delete permissions when delete app.
* delete permissions when delete app.
*/
*/
public
void
deleteRolePermissionsByAppId
(
String
appId
,
String
operator
);
public
void
deleteRolePermissionsByAppId
(
String
appId
,
String
operator
);
/**
* delete permissions when delete app namespace.
*/
public
void
deleteRolePermissionsByAppIdAndNamespace
(
String
appId
,
String
namespaceName
,
String
operator
);
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/defaultimpl/DefaultRolePermissionService.java
浏览文件 @
d1db52ab
package
com.ctrip.framework.apollo.portal.spi.defaultimpl
;
package
com.ctrip.framework.apollo.portal.spi.defaultimpl
;
import
com.ctrip.framework.apollo.common.entity.BaseEntity
;
import
com.ctrip.framework.apollo.openapi.repository.ConsumerRoleRepository
;
import
com.ctrip.framework.apollo.openapi.repository.ConsumerRoleRepository
;
import
com.ctrip.framework.apollo.portal.component.config.PortalConfig
;
import
com.ctrip.framework.apollo.portal.component.config.PortalConfig
;
import
com.ctrip.framework.apollo.portal.entity.bo.UserInfo
;
import
com.ctrip.framework.apollo.portal.entity.bo.UserInfo
;
...
@@ -18,8 +17,6 @@ import com.google.common.collect.FluentIterable;
...
@@ -18,8 +17,6 @@ import com.google.common.collect.FluentIterable;
import
com.google.common.collect.HashMultimap
;
import
com.google.common.collect.HashMultimap
;
import
com.google.common.collect.Multimap
;
import
com.google.common.collect.Multimap
;
import
com.google.common.collect.Sets
;
import
com.google.common.collect.Sets
;
import
java.util.function.Function
;
import
java.util.stream.Collectors
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.util.CollectionUtils
;
...
@@ -251,4 +248,31 @@ public class DefaultRolePermissionService implements RolePermissionService {
...
@@ -251,4 +248,31 @@ public class DefaultRolePermissionService implements RolePermissionService {
consumerRoleRepository
.
batchDeleteByRoleIds
(
roleIds
,
operator
);
consumerRoleRepository
.
batchDeleteByRoleIds
(
roleIds
,
operator
);
}
}
}
}
@Transactional
@Override
public
void
deleteRolePermissionsByAppIdAndNamespace
(
String
appId
,
String
namespaceName
,
String
operator
)
{
List
<
Long
>
permissionIds
=
permissionRepository
.
findPermissionIdsByAppIdAndNamespace
(
appId
,
namespaceName
);
if
(!
permissionIds
.
isEmpty
())
{
// 1. delete Permission
permissionRepository
.
batchDelete
(
permissionIds
,
operator
);
// 2. delete Role Permission
rolePermissionRepository
.
batchDeleteByPermissionIds
(
permissionIds
,
operator
);
}
List
<
Long
>
roleIds
=
roleRepository
.
findRoleIdsByAppIdAndNamespace
(
appId
,
namespaceName
);
if
(!
roleIds
.
isEmpty
())
{
// 3. delete Role
roleRepository
.
batchDelete
(
roleIds
,
operator
);
// 4. delete User Role
userRoleRepository
.
batchDeleteByRoleIds
(
roleIds
,
operator
);
// 5. delete Consumer Role
consumerRoleRepository
.
batchDeleteByRoleIds
(
roleIds
,
operator
);
}
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录