From d0807c56fa249cb90bea7a90499699099646a5ac Mon Sep 17 00:00:00 2001 From: alex Date: Sun, 18 Apr 2021 00:07:34 +0800 Subject: [PATCH] =?UTF-8?q?0.7.0=20=E9=87=8D=E6=9E=84permission=E4=B8=BAau?= =?UTF-8?q?thority=E5=B9=B6=E5=A2=9E=E5=8A=A0=E4=B8=80=E4=BA=9B=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 +- settings.gradle | 2 + src/zeus.app/build.gradle | 1 + .../synebula/zeus/app/config/ZeusServices.kt | 3 +- .../zeus/app/controller/rbac/AuthorityApp.kt | 42 +++++++++++++++++++ .../controller/rbac/resource/PermissionApp.kt | 21 ---------- .../zeus/domain/model/rbac/Authority.kt | 19 +++++++++ .../domain/model/rbac/resource/Permission.kt | 12 ------ .../domain/repository/IAuthorityRepository.kt | 8 ++++ .../service/cmd/rbac/AuthorityBatchAddCmd.kt | 12 ++++++ .../PermissionCmd.kt => AuthorityCmd.kt} | 8 ++-- .../service/contr/rbac/IAuthorityService.kt | 14 +++++++ .../contr/rbac/resource/IPermissionService.kt | 7 ---- .../service/impl/rbac/AuthorityService.kt | 26 ++++++++++++ .../impl/rbac/resource/PermissionService.kt | 13 ------ .../{PermissionType.kt => AuthorityType.kt} | 2 +- src/zeus.query/build.gradle | 2 +- .../zeus/query/contr/IAuthorityQuery.kt | 26 ++++++++++++ .../query/contr/resouce/IInterfaceQuery.kt | 4 +- .../zeus/query/contr/resouce/IPageQuery.kt | 6 +-- .../query/contr/resouce/IPermissionQuery.kt | 13 ------ .../zeus/query/contr/resouce/ISystemQuery.kt | 4 +- .../PermissionQuery.kt => AuthorityQuery.kt} | 21 +++++----- .../zeus/query/impl/resouce/InterfaceQuery.kt | 20 ++++----- .../zeus/query/impl/resouce/PageQuery.kt | 22 +++++----- .../zeus/query/impl/resouce/SystemQuery.kt | 13 +++--- .../synebula/zeus/query/view/AuthorityView.kt | 12 ++++++ .../query/view/resource/PermissionView.kt | 12 ------ src/zeus.repository/build.gradle | 17 ++++++++ .../zeus/repository/AuthorityRepository.kt | 22 ++++++++++ 30 files changed, 256 insertions(+), 130 deletions(-) create mode 100644 src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/AuthorityApp.kt delete mode 100644 src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/resource/PermissionApp.kt create mode 100644 src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/model/rbac/Authority.kt delete mode 100644 src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/model/rbac/resource/Permission.kt create mode 100644 src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/repository/IAuthorityRepository.kt create mode 100644 src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/AuthorityBatchAddCmd.kt rename src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/{resource/PermissionCmd.kt => AuthorityCmd.kt} (52%) create mode 100644 src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/contr/rbac/IAuthorityService.kt delete mode 100644 src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/contr/rbac/resource/IPermissionService.kt create mode 100644 src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/impl/rbac/AuthorityService.kt delete mode 100644 src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/impl/rbac/resource/PermissionService.kt rename src/zeus.env/src/main/kotlin/com/synebula/zeus/env/{PermissionType.kt => AuthorityType.kt} (70%) create mode 100644 src/zeus.query/src/main/kotlin/com/synebula/zeus/query/contr/IAuthorityQuery.kt delete mode 100644 src/zeus.query/src/main/kotlin/com/synebula/zeus/query/contr/resouce/IPermissionQuery.kt rename src/zeus.query/src/main/kotlin/com/synebula/zeus/query/impl/{resouce/PermissionQuery.kt => AuthorityQuery.kt} (55%) create mode 100644 src/zeus.query/src/main/kotlin/com/synebula/zeus/query/view/AuthorityView.kt delete mode 100644 src/zeus.query/src/main/kotlin/com/synebula/zeus/query/view/resource/PermissionView.kt create mode 100644 src/zeus.repository/build.gradle create mode 100644 src/zeus.repository/src/main/kotlin/com/synebula/zeus/repository/AuthorityRepository.kt diff --git a/build.gradle b/build.gradle index f65feab..827745d 100644 --- a/build.gradle +++ b/build.gradle @@ -21,7 +21,7 @@ allprojects { subprojects { ext { - version '0.6.3' + version '0.7.0' gaea_version = '0.10.3' spring_version = "2.3.0.RELEASE" } diff --git a/settings.gradle b/settings.gradle index 4999cac..4afe6bd 100644 --- a/settings.gradle +++ b/settings.gradle @@ -4,3 +4,5 @@ include 'src:zeus.app' include 'src:zeus.domain' include 'src:zeus.query' include 'src:zeus.env' +include 'src:zeus.repository' + diff --git a/src/zeus.app/build.gradle b/src/zeus.app/build.gradle index a1b2418..e2f1d02 100644 --- a/src/zeus.app/build.gradle +++ b/src/zeus.app/build.gradle @@ -13,6 +13,7 @@ jar.enabled = true //jar SKIPPED问题,不设置可能会无法打jar dependencies { compile project(":src:zeus.domain") compile project(":src:zeus.query") + compile project(":src:zeus.repository") compile "com.synebula:gaea.app:$gaea_version" compile "com.synebula:gaea.mongo:$gaea_version" diff --git a/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/config/ZeusServices.kt b/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/config/ZeusServices.kt index d4f8285..098cee4 100644 --- a/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/config/ZeusServices.kt +++ b/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/config/ZeusServices.kt @@ -10,7 +10,8 @@ import org.springframework.stereotype.Component @ComponentScan( basePackages = [ "com.synebula.zeus.domain.service.impl", - "com.synebula.zeus.query.impl" + "com.synebula.zeus.query.impl", + "com.synebula.zeus.repository" ], includeFilters = [Filter(type = FilterType.CUSTOM, classes = [AllTypeFilter::class])] ) diff --git a/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/AuthorityApp.kt b/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/AuthorityApp.kt new file mode 100644 index 0000000..8a7cd7b --- /dev/null +++ b/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/AuthorityApp.kt @@ -0,0 +1,42 @@ +package com.synebula.zeus.app.controller.rbac + +import com.synebula.gaea.app.Application +import com.synebula.gaea.app.component.aop.annotation.MethodName +import com.synebula.gaea.app.struct.HttpMessage +import com.synebula.gaea.log.ILogger +import com.synebula.zeus.domain.service.cmd.rbac.AuthorityBatchAddCmd +import com.synebula.zeus.domain.service.cmd.rbac.AuthorityCmd +import com.synebula.zeus.domain.service.contr.rbac.IAuthorityService +import com.synebula.zeus.env.ResourceType +import com.synebula.zeus.query.contr.IAuthorityQuery +import com.synebula.zeus.query.view.AuthorityView +import org.springframework.web.bind.annotation.* + +@RestController +@RequestMapping("/authorities") +class AuthorityApp( + query: IAuthorityQuery, + logger: ILogger, + private var authorityService: IAuthorityService +) : Application( + "权限信息", AuthorityView::class.java, + authorityService, query, logger +) { + @MethodName("批量添加权限信息") + @PostMapping("/batch") + fun add(@RequestBody cmd: AuthorityBatchAddCmd): HttpMessage { + this.authorityService.add(cmd) + return HttpMessage() + } + + @MethodName("根据资源和角色删除权限") + @DeleteMapping("/{type}/role/{role}") + fun removeByResourceRole( + @PathVariable type: ResourceType, + @PathVariable role: String, + @RequestBody resource: List + ): HttpMessage { + this.authorityService.removeByResourceRole(type, resource, role) + return HttpMessage() + } +} \ No newline at end of file diff --git a/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/resource/PermissionApp.kt b/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/resource/PermissionApp.kt deleted file mode 100644 index 22e8484..0000000 --- a/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/resource/PermissionApp.kt +++ /dev/null @@ -1,21 +0,0 @@ -package com.synebula.zeus.app.controller.rbac.resource - -import com.synebula.gaea.app.Application -import com.synebula.gaea.log.ILogger -import com.synebula.zeus.domain.service.cmd.rbac.resource.PermissionCmd -import com.synebula.zeus.domain.service.contr.rbac.resource.IPermissionService -import com.synebula.zeus.query.contr.resouce.IPermissionQuery -import com.synebula.zeus.query.view.resource.PermissionView -import org.springframework.web.bind.annotation.RequestMapping -import org.springframework.web.bind.annotation.RestController - -@RestController -@RequestMapping("/permissions") -class PermissionApp( - service: IPermissionService, - query: IPermissionQuery, - logger: ILogger -) : Application( - "权限信息", PermissionView::class.java, - service, query, logger -) \ No newline at end of file diff --git a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/model/rbac/Authority.kt b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/model/rbac/Authority.kt new file mode 100644 index 0000000..24947d6 --- /dev/null +++ b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/model/rbac/Authority.kt @@ -0,0 +1,19 @@ +package com.synebula.zeus.domain.model.rbac + +import com.synebula.gaea.domain.model.AggregateRoot +import com.synebula.zeus.env.AuthorityType +import com.synebula.zeus.env.ResourceType + +class Authority(override var id: String? = null) : AggregateRoot() { + var role = "" + var resource = "" + var type: ResourceType? = null + var authority = AuthorityType.Allow + + constructor(role: String, resource: String, type: ResourceType?, authority: AuthorityType) : this() { + this.role = role + this.resource = resource + this.type = type + this.authority = authority + } +} \ No newline at end of file diff --git a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/model/rbac/resource/Permission.kt b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/model/rbac/resource/Permission.kt deleted file mode 100644 index e07d0a7..0000000 --- a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/model/rbac/resource/Permission.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.synebula.zeus.domain.model.rbac.resource - -import com.synebula.gaea.domain.model.AggregateRoot -import com.synebula.zeus.env.PermissionType -import com.synebula.zeus.env.ResourceType - -class Permission(override var id: String? = null) : AggregateRoot() { - var role = "" - var resource = "" - var type: ResourceType? = null - var authority = PermissionType.Allow -} \ No newline at end of file diff --git a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/repository/IAuthorityRepository.kt b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/repository/IAuthorityRepository.kt new file mode 100644 index 0000000..9233b3f --- /dev/null +++ b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/repository/IAuthorityRepository.kt @@ -0,0 +1,8 @@ +package com.synebula.zeus.domain.repository + +import com.synebula.gaea.domain.repository.IRepository +import com.synebula.zeus.env.ResourceType + +interface IAuthorityRepository : IRepository { + fun removeByResourceRole(type: ResourceType, resource: List, role: String) +} \ No newline at end of file diff --git a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/AuthorityBatchAddCmd.kt b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/AuthorityBatchAddCmd.kt new file mode 100644 index 0000000..e3ed7f6 --- /dev/null +++ b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/AuthorityBatchAddCmd.kt @@ -0,0 +1,12 @@ +package com.synebula.zeus.domain.service.cmd.rbac + +import com.synebula.gaea.domain.service.Command +import com.synebula.zeus.env.AuthorityType +import com.synebula.zeus.env.ResourceType + +class AuthorityBatchAddCmd : Command() { + var role = "" + var resource = listOf() + var type: ResourceType? = null + var authority = AuthorityType.Allow +} \ No newline at end of file diff --git a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/resource/PermissionCmd.kt b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/AuthorityCmd.kt similarity index 52% rename from src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/resource/PermissionCmd.kt rename to src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/AuthorityCmd.kt index b23a80b..36cd3dc 100644 --- a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/resource/PermissionCmd.kt +++ b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/AuthorityCmd.kt @@ -1,13 +1,13 @@ -package com.synebula.zeus.domain.service.cmd.rbac.resource +package com.synebula.zeus.domain.service.cmd.rbac import com.synebula.gaea.domain.service.Command -import com.synebula.zeus.env.PermissionType +import com.synebula.zeus.env.AuthorityType import com.synebula.zeus.env.ResourceType -class PermissionCmd : Command() { +class AuthorityCmd : Command() { var id: String? = null var role = "" var resource = "" var type: ResourceType? = null - var authority = PermissionType.Allow + var authority = AuthorityType.Allow } \ No newline at end of file diff --git a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/contr/rbac/IAuthorityService.kt b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/contr/rbac/IAuthorityService.kt new file mode 100644 index 0000000..8c7e0bd --- /dev/null +++ b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/contr/rbac/IAuthorityService.kt @@ -0,0 +1,14 @@ +package com.synebula.zeus.domain.service.contr.rbac + +import com.synebula.gaea.domain.service.IService +import com.synebula.zeus.domain.model.rbac.Authority +import com.synebula.zeus.domain.service.cmd.rbac.AuthorityBatchAddCmd +import com.synebula.zeus.env.ResourceType + +interface IAuthorityService : IService { + + fun add(cmd: AuthorityBatchAddCmd) + + fun removeByResourceRole(type: ResourceType, resource: List, role: String) + +} \ No newline at end of file diff --git a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/contr/rbac/resource/IPermissionService.kt b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/contr/rbac/resource/IPermissionService.kt deleted file mode 100644 index 7ec3dbd..0000000 --- a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/contr/rbac/resource/IPermissionService.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.synebula.zeus.domain.service.contr.rbac.resource - -import com.synebula.gaea.domain.service.IService - -interface IPermissionService : IService { - -} \ No newline at end of file diff --git a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/impl/rbac/AuthorityService.kt b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/impl/rbac/AuthorityService.kt new file mode 100644 index 0000000..76bcb8c --- /dev/null +++ b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/impl/rbac/AuthorityService.kt @@ -0,0 +1,26 @@ +package com.synebula.zeus.domain.service.impl.rbac + +import com.synebula.gaea.data.IObjectConverter +import com.synebula.gaea.domain.service.Service +import com.synebula.gaea.log.ILogger +import com.synebula.zeus.domain.model.rbac.Authority +import com.synebula.zeus.domain.repository.IAuthorityRepository +import com.synebula.zeus.domain.service.cmd.rbac.AuthorityBatchAddCmd +import com.synebula.zeus.domain.service.contr.rbac.IAuthorityService +import com.synebula.zeus.env.ResourceType + +class AuthorityService( + private var authorityRepository: IAuthorityRepository, + converter: IObjectConverter, logger: ILogger +) : Service(Authority::class.java, authorityRepository, converter, logger), + IAuthorityService { + + override fun add(cmd: AuthorityBatchAddCmd) { + val authorities = cmd.resource.map { Authority(cmd.role, it, cmd.type, cmd.authority) } + this.repository.add(authorities, this.clazz) + } + + override fun removeByResourceRole(type: ResourceType, resource: List, role: String) { + this.authorityRepository.removeByResourceRole(type, resource, role) + } +} \ No newline at end of file diff --git a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/impl/rbac/resource/PermissionService.kt b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/impl/rbac/resource/PermissionService.kt deleted file mode 100644 index 6f57fcd..0000000 --- a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/impl/rbac/resource/PermissionService.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.synebula.zeus.domain.service.impl.rbac.resource - -import com.synebula.gaea.data.IObjectConverter -import com.synebula.gaea.domain.repository.IRepository -import com.synebula.gaea.domain.service.Service -import com.synebula.gaea.log.ILogger -import com.synebula.zeus.domain.model.rbac.resource.Permission -import com.synebula.zeus.domain.service.contr.rbac.resource.IPermissionService - -class PermissionService( - repository: IRepository, - converter: IObjectConverter, logger: ILogger -) : Service(Permission::class.java, repository, converter, logger), IPermissionService \ No newline at end of file diff --git a/src/zeus.env/src/main/kotlin/com/synebula/zeus/env/PermissionType.kt b/src/zeus.env/src/main/kotlin/com/synebula/zeus/env/AuthorityType.kt similarity index 70% rename from src/zeus.env/src/main/kotlin/com/synebula/zeus/env/PermissionType.kt rename to src/zeus.env/src/main/kotlin/com/synebula/zeus/env/AuthorityType.kt index 845023d..c080c85 100644 --- a/src/zeus.env/src/main/kotlin/com/synebula/zeus/env/PermissionType.kt +++ b/src/zeus.env/src/main/kotlin/com/synebula/zeus/env/AuthorityType.kt @@ -1,6 +1,6 @@ package com.synebula.zeus.env -enum class PermissionType { +enum class AuthorityType { Default, Deny, Allow diff --git a/src/zeus.query/build.gradle b/src/zeus.query/build.gradle index 2d2cafd..d1e1cfd 100644 --- a/src/zeus.query/build.gradle +++ b/src/zeus.query/build.gradle @@ -7,7 +7,7 @@ publishing { publications { publish(MavenPublication) { group 'com.synebula' - artifactId 'zeus.view' + artifactId 'zeus.query' version "$version" from components.java } diff --git a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/contr/IAuthorityQuery.kt b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/contr/IAuthorityQuery.kt new file mode 100644 index 0000000..a678e4b --- /dev/null +++ b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/contr/IAuthorityQuery.kt @@ -0,0 +1,26 @@ +package com.synebula.zeus.query.contr + +import com.synebula.gaea.query.IQuery +import com.synebula.zeus.env.AuthorityType +import com.synebula.zeus.env.ResourceType +import com.synebula.zeus.query.view.AuthorityView + +interface IAuthorityQuery : IQuery { + + /** + * 获取角色已授权的资源 + * + * @param resourceType 资源类型 + * @param role 角色id + */ + fun authorized(resourceType: ResourceType, role: String): List + + /** + * 获取角色资源的授权信息 + * + * @param resourceType 资源里欸选哪个 + * @param resource 资源id + * @param role 角色id + */ + fun authorize(resourceType: ResourceType, resource: String, role: String): AuthorityType +} diff --git a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/contr/resouce/IInterfaceQuery.kt b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/contr/resouce/IInterfaceQuery.kt index 4857359..5bce563 100644 --- a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/contr/resouce/IInterfaceQuery.kt +++ b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/contr/resouce/IInterfaceQuery.kt @@ -1,7 +1,7 @@ package com.synebula.zeus.query.contr.resouce import com.synebula.gaea.query.IQuery -import com.synebula.zeus.env.PermissionType +import com.synebula.zeus.env.AuthorityType import com.synebula.zeus.query.view.resource.InterfaceView interface IInterfaceQuery : IQuery { @@ -10,5 +10,5 @@ interface IInterfaceQuery : IQuery { fun authorized(role: String, system: String?): List - fun authorize(resource: String, role: String): PermissionType? + fun authorize(resource: String, role: String): AuthorityType? } \ No newline at end of file diff --git a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/contr/resouce/IPageQuery.kt b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/contr/resouce/IPageQuery.kt index b0c425e..c57a9c2 100644 --- a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/contr/resouce/IPageQuery.kt +++ b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/contr/resouce/IPageQuery.kt @@ -1,7 +1,7 @@ package com.synebula.zeus.query.contr.resouce import com.synebula.gaea.query.IQuery -import com.synebula.zeus.env.PermissionType +import com.synebula.zeus.env.AuthorityType import com.synebula.zeus.query.view.resource.PageView interface IPageQuery : IQuery { @@ -10,7 +10,7 @@ interface IPageQuery : IQuery { fun authorized(role: String, system: String? ): List - fun authorize(resource: String, role: String): PermissionType? + fun authorize(resource: String, role: String): AuthorityType? - fun uriAuthorize(path: String, role: String): PermissionType? + fun uriAuthorize(path: String, role: String): AuthorityType? } \ No newline at end of file diff --git a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/contr/resouce/IPermissionQuery.kt b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/contr/resouce/IPermissionQuery.kt deleted file mode 100644 index 3e66d9a..0000000 --- a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/contr/resouce/IPermissionQuery.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.synebula.zeus.query.contr.resouce - -import com.synebula.gaea.query.IQuery -import com.synebula.zeus.env.PermissionType -import com.synebula.zeus.env.ResourceType -import com.synebula.zeus.query.view.resource.PermissionView - -interface IPermissionQuery : IQuery { - - fun resourcePermissions(resourceType: ResourceType, role: String): List - - fun authentication(resourceType: ResourceType, resource: String, role: String): PermissionType -} diff --git a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/contr/resouce/ISystemQuery.kt b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/contr/resouce/ISystemQuery.kt index ad82c64..c169971 100644 --- a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/contr/resouce/ISystemQuery.kt +++ b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/contr/resouce/ISystemQuery.kt @@ -1,12 +1,12 @@ package com.synebula.zeus.query.contr.resouce import com.synebula.gaea.query.IQuery -import com.synebula.zeus.env.PermissionType +import com.synebula.zeus.env.AuthorityType import com.synebula.zeus.query.view.resource.SystemView interface ISystemQuery : IQuery { fun authorized(role: String): List - fun authorize(resource: String, role: String): PermissionType? + fun authorize(resource: String, role: String): AuthorityType? } \ No newline at end of file diff --git a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/impl/resouce/PermissionQuery.kt b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/impl/AuthorityQuery.kt similarity index 55% rename from src/zeus.query/src/main/kotlin/com/synebula/zeus/query/impl/resouce/PermissionQuery.kt rename to src/zeus.query/src/main/kotlin/com/synebula/zeus/query/impl/AuthorityQuery.kt index 24f176b..3cd011a 100644 --- a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/impl/resouce/PermissionQuery.kt +++ b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/impl/AuthorityQuery.kt @@ -1,19 +1,20 @@ -package com.synebula.zeus.query.impl.resouce +package com.synebula.zeus.query.impl import com.synebula.gaea.mongo.query.MongoQuery -import com.synebula.zeus.env.PermissionType +import com.synebula.zeus.env.AuthorityType import com.synebula.zeus.env.ResourceType -import com.synebula.zeus.query.contr.resouce.IPermissionQuery -import com.synebula.zeus.query.view.resource.PermissionView +import com.synebula.zeus.query.contr.IAuthorityQuery +import com.synebula.zeus.query.view.AuthorityView import org.springframework.data.mongodb.core.MongoTemplate import org.springframework.data.mongodb.core.query.Criteria import org.springframework.data.mongodb.core.query.Query -class PermissionQuery(template: MongoTemplate) : MongoQuery(template), IPermissionQuery { - var clazz = PermissionView::class.java +class AuthorityQuery(template: MongoTemplate) : MongoQuery(template), + IAuthorityQuery { + var clazz = AuthorityView::class.java var collection = this.collection(this.clazz) - override fun resourcePermissions(resourceType: ResourceType, role: String): List { + override fun authorized(resourceType: ResourceType, role: String): List { return this.template.find( Query.query( Criteria.where("type").`is`(resourceType) @@ -21,13 +22,13 @@ class PermissionQuery(template: MongoTemplate) : MongoQuery(template), IPermissi ), this.clazz, this.collection) } - override fun authentication(resourceType: ResourceType, resource: String, role: String): PermissionType { - val permission = this.template.findOne( + override fun authorize(resourceType: ResourceType, resource: String, role: String): AuthorityType { + val authority = this.template.findOne( Query.query( Criteria.where("type").`is`(resourceType) .and("resource").`is`(resource) .and("role").`is`(role) ), this.clazz, this.collection) - return permission?.authority ?: PermissionType.Default + return authority?.authority ?: AuthorityType.Default } } diff --git a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/impl/resouce/InterfaceQuery.kt b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/impl/resouce/InterfaceQuery.kt index 15027b2..95de796 100644 --- a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/impl/resouce/InterfaceQuery.kt +++ b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/impl/resouce/InterfaceQuery.kt @@ -1,15 +1,15 @@ package com.synebula.zeus.query.impl.resouce import com.synebula.gaea.mongo.query.MongoQuery -import com.synebula.zeus.env.PermissionType +import com.synebula.zeus.env.AuthorityType import com.synebula.zeus.env.ResourceType import com.synebula.zeus.query.contr.resouce.IInterfaceQuery -import com.synebula.zeus.query.contr.resouce.IPermissionQuery +import com.synebula.zeus.query.contr.IAuthorityQuery import com.synebula.zeus.query.contr.resouce.ISystemQuery import com.synebula.zeus.query.view.resource.InterfaceView import org.springframework.data.mongodb.core.MongoTemplate -class InterfaceQuery(template: MongoTemplate, var permissionQuery: IPermissionQuery, var systemQuery: ISystemQuery) : +class InterfaceQuery(template: MongoTemplate, var authorityQuery: IAuthorityQuery, var systemQuery: ISystemQuery) : MongoQuery(template), IInterfaceQuery { @@ -22,21 +22,21 @@ class InterfaceQuery(template: MongoTemplate, var permissionQuery: IPermissionQu override fun authorized(role: String, system: String?): List { if (system != null) { - val permission = this.systemQuery.authorize(system, role) - if (permission == PermissionType.Deny) + val authority = this.systemQuery.authorize(system, role) + if (authority == AuthorityType.Deny) return listOf() } val params = mutableMapOf() if (system != null) params["system"] = system val interfaces = this.list(params, this.clazz) - val permissions = this.permissionQuery.resourcePermissions(ResourceType.Interface, role) + val authorities = this.authorityQuery.authorized(ResourceType.Interface, role) return interfaces.filter { i -> - val permission = permissions.find { p -> i.id == p.resource } - permission == null || permission.authority == PermissionType.Allow + val authority = authorities.find { p -> i.id == p.resource } + authority == null || authority.authority == AuthorityType.Allow } } - override fun authorize(resource: String, role: String): PermissionType { - return this.permissionQuery.authentication(ResourceType.Interface, resource, role) + override fun authorize(resource: String, role: String): AuthorityType { + return this.authorityQuery.authorize(ResourceType.Interface, resource, role) } } \ No newline at end of file diff --git a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/impl/resouce/PageQuery.kt b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/impl/resouce/PageQuery.kt index 1af97c1..8e3792a 100644 --- a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/impl/resouce/PageQuery.kt +++ b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/impl/resouce/PageQuery.kt @@ -1,17 +1,17 @@ package com.synebula.zeus.query.impl.resouce import com.synebula.gaea.mongo.query.MongoQuery -import com.synebula.zeus.env.PermissionType +import com.synebula.zeus.env.AuthorityType import com.synebula.zeus.env.ResourceType import com.synebula.zeus.query.contr.resouce.IPageQuery -import com.synebula.zeus.query.contr.resouce.IPermissionQuery +import com.synebula.zeus.query.contr.IAuthorityQuery import com.synebula.zeus.query.contr.resouce.ISystemQuery import com.synebula.zeus.query.view.resource.PageView import org.springframework.data.mongodb.core.MongoTemplate import org.springframework.data.mongodb.core.query.Criteria import org.springframework.data.mongodb.core.query.Query -class PageQuery(template: MongoTemplate, var permissionQuery: IPermissionQuery, var systemQuery: ISystemQuery) : +class PageQuery(template: MongoTemplate, var authorityQuery: IAuthorityQuery, var systemQuery: ISystemQuery) : MongoQuery(template), IPageQuery { private val clazz = PageView::class.java @@ -21,25 +21,25 @@ class PageQuery(template: MongoTemplate, var permissionQuery: IPermissionQuery, override fun authorized(role: String, system: String?): List { if (system != null) { - val permission = this.systemQuery.authorize(system, role) - if (permission == PermissionType.Deny) + val authority = this.systemQuery.authorize(system, role) + if (authority == AuthorityType.Deny) return listOf() } val params = mutableMapOf() if (system != null) params["system"] = system val pages = this.list(params, this.clazz) - val permissions = this.permissionQuery.resourcePermissions(ResourceType.Page, role) + val authorities = this.authorityQuery.authorized(ResourceType.Page, role) return pages.filter { i -> - val permission = permissions.find { p -> i.id == p.resource } - permission != null && permission.authority == PermissionType.Allow + val authority = authorities.find { p -> i.id == p.resource } + authority != null && authority.authority == AuthorityType.Allow } } - override fun authorize(resource: String, role: String): PermissionType { - return this.permissionQuery.authentication(ResourceType.Page, resource, role) + override fun authorize(resource: String, role: String): AuthorityType { + return this.authorityQuery.authorize(ResourceType.Page, resource, role) } - override fun uriAuthorize(path: String, role: String): PermissionType? { + override fun uriAuthorize(path: String, role: String): AuthorityType? { val page = this.template.findOne( Query.query(Criteria.where("uri").`is`(path)), this.clazz, this.collection(this.clazz) diff --git a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/impl/resouce/SystemQuery.kt b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/impl/resouce/SystemQuery.kt index 5cb6b50..b84ac53 100644 --- a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/impl/resouce/SystemQuery.kt +++ b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/impl/resouce/SystemQuery.kt @@ -1,22 +1,23 @@ package com.synebula.zeus.query.impl.resouce import com.synebula.gaea.mongo.query.MongoQuery -import com.synebula.zeus.env.PermissionType +import com.synebula.zeus.env.AuthorityType import com.synebula.zeus.env.ResourceType import com.synebula.zeus.query.contr.resouce.ISystemQuery +import com.synebula.zeus.query.impl.AuthorityQuery import com.synebula.zeus.query.view.resource.SystemView import org.springframework.data.mongodb.core.MongoTemplate -class SystemQuery(template: MongoTemplate, var permissionQuery: PermissionQuery) : MongoQuery(template), ISystemQuery { +class SystemQuery(template: MongoTemplate, var authorityQuery: AuthorityQuery) : MongoQuery(template), ISystemQuery { private val clazz = SystemView::class.java override fun authorized(role: String): List { val systems = this.list(mapOf(), this.clazz) - val permissions = this.permissionQuery.resourcePermissions(ResourceType.System, role) - return systems.filter { i -> permissions.find { p -> i.id == p.resource }?.authority == PermissionType.Allow } + val authorities = this.authorityQuery.authorized(ResourceType.System, role) + return systems.filter { i -> authorities.find { p -> i.id == p.resource }?.authority == AuthorityType.Allow } } - override fun authorize(resource: String, role: String): PermissionType { - return this.permissionQuery.authentication(ResourceType.System, resource, role) + override fun authorize(resource: String, role: String): AuthorityType { + return this.authorityQuery.authorize(ResourceType.System, resource, role) } } \ No newline at end of file diff --git a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/view/AuthorityView.kt b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/view/AuthorityView.kt new file mode 100644 index 0000000..1613030 --- /dev/null +++ b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/view/AuthorityView.kt @@ -0,0 +1,12 @@ +package com.synebula.zeus.query.view + +import com.synebula.zeus.env.AuthorityType +import com.synebula.zeus.env.ResourceType + +class AuthorityView() { + var id: String? = null + var role = "" + var resource = "" + var type: ResourceType? = null + var authority = AuthorityType.Allow +} \ No newline at end of file diff --git a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/view/resource/PermissionView.kt b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/view/resource/PermissionView.kt deleted file mode 100644 index 2031afd..0000000 --- a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/view/resource/PermissionView.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.synebula.zeus.query.view.resource - -import com.synebula.zeus.env.PermissionType -import com.synebula.zeus.env.ResourceType - -class PermissionView() { - var id: String? = null - var role = "" - var resource = "" - var type: ResourceType? = null - var authority = PermissionType.Allow -} \ No newline at end of file diff --git a/src/zeus.repository/build.gradle b/src/zeus.repository/build.gradle new file mode 100644 index 0000000..1754059 --- /dev/null +++ b/src/zeus.repository/build.gradle @@ -0,0 +1,17 @@ +dependencies { + compile project(":src:zeus.env") + compile project(":src:zeus.domain") + compile "com.synebula:gaea.mongo:$gaea_version" +} + +publishing { + publications { + publish(MavenPublication) { + group 'com.synebula' + artifactId 'zeus.repository' + version "$version" + from components.java + } + } +} + diff --git a/src/zeus.repository/src/main/kotlin/com/synebula/zeus/repository/AuthorityRepository.kt b/src/zeus.repository/src/main/kotlin/com/synebula/zeus/repository/AuthorityRepository.kt new file mode 100644 index 0000000..9f9b3a6 --- /dev/null +++ b/src/zeus.repository/src/main/kotlin/com/synebula/zeus/repository/AuthorityRepository.kt @@ -0,0 +1,22 @@ +package com.synebula.zeus.repository + +import com.synebula.gaea.mongo.repository.MongoRepository +import com.synebula.zeus.domain.model.rbac.Authority +import com.synebula.zeus.domain.repository.IAuthorityRepository +import com.synebula.zeus.env.ResourceType +import org.springframework.data.mongodb.core.MongoTemplate +import org.springframework.data.mongodb.core.query.Criteria +import org.springframework.data.mongodb.core.query.Query + +class AuthorityRepository(var template: MongoTemplate) : MongoRepository(template), IAuthorityRepository { + override fun removeByResourceRole(type: ResourceType, resource: List, role: String) { + this.template.remove( + Query.query( + Criteria.where("type").`is`(type) + .and("resource").`in`(resource) + .and("role").`is`(role) + ), + Authority::class.java + ) + } +} \ No newline at end of file