From e09d2db2b8313dadcc49b6cfcbedf434c3720491 Mon Sep 17 00:00:00 2001 From: alex Date: Sun, 1 Nov 2020 16:34:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9D=83=E9=99=90=E5=88=A4?= =?UTF-8?q?=E6=96=AD=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/synebula/zeus/app/config/ZeusBeans.kt | 4 +-- .../zeus/app/controller/rbac/GroupApp.kt | 1 - .../zeus/app/controller/rbac/RoleApp.kt | 1 - .../zeus/app/controller/rbac/UserApp.kt | 3 +- .../controller/rbac/resource/PermissionApp.kt | 14 ++++----- .../domain/model/rbac/resource/Permission.kt | 3 +- .../cmd/rbac/resource/PermissionCmd.kt | 1 + .../impl/rbac/resource/PermissionService.kt | 13 +++++++++ .../query/contr/resouce/IInterfaceQuery.kt | 6 ++++ .../zeus/query/contr/resouce/IPageQuery.kt | 6 ++++ .../query/contr/resouce/IPermissionQuery.kt | 7 +++++ .../zeus/query/contr/resouce/ISystemQuery.kt | 6 ++++ .../zeus/query/impl/resouce/InterfaceQuery.kt | 17 ++++++++++- .../zeus/query/impl/resouce/PageQuery.kt | 16 +++++++++- .../query/impl/resouce/PermissionQuery.kt | 29 +++++++++++++++++-- .../zeus/query/impl/resouce/SystemQuery.kt | 17 ++++++++++- .../query/view/resource/PermissionView.kt | 1 + 17 files changed, 124 insertions(+), 21 deletions(-) create mode 100644 src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/impl/rbac/resource/PermissionService.kt diff --git a/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/config/ZeusBeans.kt b/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/config/ZeusBeans.kt index bccc56c..87d8557 100644 --- a/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/config/ZeusBeans.kt +++ b/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/config/ZeusBeans.kt @@ -17,13 +17,13 @@ import org.springframework.data.mongodb.core.MongoTemplate @Configuration open class ZeusBeans { - @Primary @Bean + @Primary open fun > repository(template: MongoTemplate) : IRepository = MongoRepository(template) - @Primary @Bean + @Primary open fun query(template: MongoTemplate, logger: ILogger? = null) : IQuery = MongoQuery(template, logger) diff --git a/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/GroupApp.kt b/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/GroupApp.kt index af1033c..4e84b27 100644 --- a/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/GroupApp.kt +++ b/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/GroupApp.kt @@ -6,7 +6,6 @@ import com.synebula.gaea.query.IQuery import com.synebula.zeus.domain.service.cmd.rbac.GroupCmd import com.synebula.zeus.domain.service.contr.rbac.IGroupService import com.synebula.zeus.query.view.GroupView -import org.springframework.beans.factory.annotation.Qualifier import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RestController diff --git a/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/RoleApp.kt b/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/RoleApp.kt index bbcdaf1..6354c7d 100644 --- a/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/RoleApp.kt +++ b/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/RoleApp.kt @@ -6,7 +6,6 @@ import com.synebula.gaea.query.IQuery import com.synebula.zeus.domain.service.cmd.rbac.RoleCmd import com.synebula.zeus.domain.service.contr.rbac.IRoleService import com.synebula.zeus.query.view.RoleView -import org.springframework.beans.factory.annotation.Qualifier import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RestController diff --git a/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/UserApp.kt b/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/UserApp.kt index 2744c9d..f32e4b5 100644 --- a/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/UserApp.kt +++ b/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/UserApp.kt @@ -10,14 +10,13 @@ import com.synebula.zeus.domain.service.cmd.rbac.UserCmd import com.synebula.zeus.domain.service.contr.rbac.IUserService import com.synebula.zeus.query.view.UserView import org.springframework.beans.factory.annotation.Autowired -import org.springframework.beans.factory.annotation.Qualifier import org.springframework.web.bind.annotation.* @RestController @RequestMapping("/users") class UserApp( service: IUserService, - @Qualifier("query") query: IQuery, + query: IQuery, logger: ILogger ) : Application( "用户信息", UserView::class.java, 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 index d6616c1..fc0837d 100644 --- 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 @@ -2,13 +2,9 @@ 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.PageCmd import com.synebula.zeus.domain.service.cmd.rbac.resource.PermissionCmd -import com.synebula.zeus.domain.service.contr.rbac.resource.IPageService import com.synebula.zeus.domain.service.contr.rbac.resource.IPermissionService -import com.synebula.zeus.query.contr.resouce.IPageQuery import com.synebula.zeus.query.contr.resouce.IPermissionQuery -import com.synebula.zeus.query.view.resource.PageView import com.synebula.zeus.query.view.resource.PermissionView import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RestController @@ -16,10 +12,10 @@ import org.springframework.web.bind.annotation.RestController @RestController @RequestMapping("/permissions") class PermissionApp( - service: IPermissionService, - query: IPermissionQuery, - logger: ILogger + service: IPermissionService, + query: IPermissionQuery, + logger: ILogger ) : Application( - "权限信息", PermissionView::class.java, - service, query, logger + "权限信息", 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/resource/Permission.kt b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/model/rbac/resource/Permission.kt index 8b9e67b..53f8541 100644 --- 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 @@ -4,7 +4,8 @@ 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?) : AggregateRoot() { +class Permission(override var id: String? = null) : AggregateRoot() { + var role = "" var resource = "" var type: ResourceType? = null var authorization = PermissionType.Allow 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/resource/PermissionCmd.kt index 8248f18..6ba3acb 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/resource/PermissionCmd.kt @@ -6,6 +6,7 @@ import com.synebula.zeus.env.ResourceType class PermissionCmd : Command() { var id: String? = null + var role = "" var resource = "" var type: ResourceType? = null var authorization = PermissionType.Allow 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 new file mode 100644 index 0000000..6f57fcd --- /dev/null +++ b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/impl/rbac/resource/PermissionService.kt @@ -0,0 +1,13 @@ +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.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 480b838..ed97915 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,6 +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.query.view.resource.InterfaceView interface IInterfaceQuery : IQuery { + + fun withPermission(role: String): List + + fun authentication(resource: String, role: String): PermissionType } \ 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 788cdf4..7d9c990 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,6 +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.query.view.resource.PageView interface IPageQuery : IQuery { + + fun withPermission(role: String): List + + fun authentication(resource: String, role: String): PermissionType } \ 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 index 93f70f2..c3285d7 100644 --- 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 @@ -1,6 +1,13 @@ 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 } \ No newline at end of file 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 af251f8..cb2f205 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,6 +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.query.view.resource.SystemView interface ISystemQuery : IQuery { + + fun withPermission(role: String): List + + fun authentication(resource: String, role: String): PermissionType } \ No newline at end of file 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 a4eb103..7d8c3aa 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,8 +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.ResourceType import com.synebula.zeus.query.contr.resouce.IInterfaceQuery +import com.synebula.zeus.query.view.resource.InterfaceView import org.springframework.data.mongodb.core.MongoTemplate -class InterfaceQuery(template: MongoTemplate) : MongoQuery(template), IInterfaceQuery { +class InterfaceQuery(template: MongoTemplate, var permissionQuery: PermissionQuery) : MongoQuery(template), IInterfaceQuery { + + private val clazz = InterfaceView::class.java + + override fun withPermission(role: String): List { + val interfaces = this.list(mapOf(), this.clazz) + val permissions = this.permissionQuery.resourcePermissions(ResourceType.Interface, role) + return interfaces.filter { i -> permissions.find { p -> i.id == p.resource }?.authorization == PermissionType.Allow } + } + + override fun authentication(resource: String, role: String): PermissionType { + return this.permissionQuery.authentication(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 cf2a7aa..1540a10 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,8 +1,22 @@ 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.ResourceType import com.synebula.zeus.query.contr.resouce.IPageQuery +import com.synebula.zeus.query.view.resource.PageView import org.springframework.data.mongodb.core.MongoTemplate -class PageQuery(template: MongoTemplate) : MongoQuery(template), IPageQuery { +class PageQuery(template: MongoTemplate, var permissionQuery: PermissionQuery) : MongoQuery(template), IPageQuery { + private val clazz = PageView::class.java + + override fun withPermission(role: String): List { + val pages = this.list(mapOf(), this.clazz) + val permissions = this.permissionQuery.resourcePermissions(ResourceType.Page, role) + return pages.filter { i -> permissions.find { p -> i.id == p.resource }?.authorization == PermissionType.Allow } + } + + override fun authentication(resource: String, role: String): PermissionType { + return this.permissionQuery.authentication(ResourceType.Page, resource, role) + } } \ 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/resouce/PermissionQuery.kt index d82fa12..f85c483 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/resouce/PermissionQuery.kt @@ -1,8 +1,33 @@ 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.ResourceType import com.synebula.zeus.query.contr.resouce.IPermissionQuery -import com.synebula.zeus.query.contr.resouce.ISystemQuery +import com.synebula.zeus.query.view.resource.PermissionView 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 \ No newline at end of file +class PermissionQuery(template: MongoTemplate) : MongoQuery(template), IPermissionQuery { + var clazz = PermissionView::class.java + var collection = this.collection(this.clazz) + + override fun resourcePermissions(resourceType: ResourceType, role: String): List { + return this.template.find( + Query.query( + Criteria.where("resourceType").`is`(resourceType) + .and("role").`is`(role) + ), this.clazz, this.collection) + } + + override fun authentication(resourceType: ResourceType, resource: String, role: String): PermissionType { + val permission = this.template.findOne( + Query.query( + Criteria.where("resourceType").`is`(resourceType) + .and("resource").`is`(resource) + .and("role").`is`(role) + ), this.clazz, this.collection) + return permission?.authorization ?: PermissionType.Allow + } +} \ No newline at end of file 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 d96892d..6e3e4b7 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,7 +1,22 @@ 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.ResourceType import com.synebula.zeus.query.contr.resouce.ISystemQuery +import com.synebula.zeus.query.view.resource.SystemView import org.springframework.data.mongodb.core.MongoTemplate -class SystemQuery(template: MongoTemplate) : MongoQuery(template), ISystemQuery \ No newline at end of file +class SystemQuery(template: MongoTemplate, var permissionQuery: PermissionQuery) : MongoQuery(template), ISystemQuery { + private val clazz = SystemView::class.java + + override fun withPermission(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 }?.authorization == PermissionType.Allow } + } + + override fun authentication(resource: String, role: String): PermissionType { + return this.permissionQuery.authentication(ResourceType.System, resource, role) + } +} \ 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 index 90a6af8..770c065 100644 --- 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 @@ -5,6 +5,7 @@ import com.synebula.zeus.env.ResourceType class PermissionView() { var id: String? = null + var role = "" var resource = "" var type: ResourceType? = null var authorization = PermissionType.Allow