diff --git a/build.gradle b/build.gradle index 178ce7a..cb4aa1a 100644 --- a/build.gradle +++ b/build.gradle @@ -21,8 +21,8 @@ allprojects { subprojects { ext { - version '0.2.1' - gaea_version = '0.5.1' + version '0.5.0' + gaea_version = '0.6.0' spring_version = "2.3.0.RELEASE" } 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..c49368c 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,32 +17,19 @@ 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) @Bean open fun gson(): Gson = Gson() - @Bean - open fun userNotifier(): IUserNotifier { - return object : IUserNotifier { - override fun added(id: String, name: String, token: String) { - - } - - override fun forgot(id: String, name: String, token: String) { - } - - } - } - @Bean open fun serializer(gson: Gson): IJsonSerializer { return object : IJsonSerializer { 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/InterfaceApp.kt b/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/resource/InterfaceApp.kt index 6cfa2ba..a20835a 100644 --- a/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/resource/InterfaceApp.kt +++ b/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/resource/InterfaceApp.kt @@ -1,11 +1,14 @@ package com.synebula.zeus.app.controller.rbac.resource import com.synebula.gaea.app.Application +import com.synebula.gaea.app.component.HttpMessage import com.synebula.gaea.log.ILogger import com.synebula.zeus.domain.service.cmd.rbac.resource.InterfaceCmd import com.synebula.zeus.domain.service.contr.rbac.resource.IInterfaceService -import com.synebula.zeus.query.impl.resouce.InterfaceQuery +import com.synebula.zeus.query.contr.resouce.IInterfaceQuery import com.synebula.zeus.query.view.resource.InterfaceView +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.PathVariable import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RestController @@ -13,9 +16,31 @@ import org.springframework.web.bind.annotation.RestController @RequestMapping("/interfaces") class InterfaceApp( service: IInterfaceService, - query: InterfaceQuery, - logger: ILogger + logger: ILogger, + var interfaceQuery: IInterfaceQuery ) : Application( "接口信息", InterfaceView::class.java, - service, query, logger -) \ No newline at end of file + service, interfaceQuery, logger +) { + + @GetMapping("/in-system/{system}/permission/{role}") + fun withSystemPermission(@PathVariable system: String, @PathVariable role: String): HttpMessage { + return this.safeExecute("获取有权资源列表失败") { msg -> + msg.data = this.interfaceQuery.withPermission(role, system) + } + } + + @GetMapping("/permission/{role}") + fun withPermission(@PathVariable role: String): HttpMessage { + return this.safeExecute("获取有权资源列表失败") { msg -> + msg.data = this.interfaceQuery.withPermission(role) + } + } + + @GetMapping("/{api}/authentication/{role}") + fun authentication(@PathVariable api: String, @PathVariable role: String): HttpMessage { + return this.safeExecute("获取权限信息失败") { msg -> + msg.data = this.interfaceQuery.authentication(api, role) + } + } +} \ No newline at end of file diff --git a/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/resource/PageApp.kt b/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/resource/PageApp.kt index 2acb911..6120b98 100644 --- a/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/resource/PageApp.kt +++ b/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/resource/PageApp.kt @@ -1,11 +1,14 @@ package com.synebula.zeus.app.controller.rbac.resource import com.synebula.gaea.app.Application +import com.synebula.gaea.app.component.HttpMessage import com.synebula.gaea.log.ILogger import com.synebula.zeus.domain.service.cmd.rbac.resource.PageCmd import com.synebula.zeus.domain.service.contr.rbac.resource.IPageService import com.synebula.zeus.query.contr.resouce.IPageQuery import com.synebula.zeus.query.view.resource.PageView +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.PathVariable import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RestController @@ -13,9 +16,40 @@ import org.springframework.web.bind.annotation.RestController @RequestMapping("/pages") class PageApp( service: IPageService, - query: IPageQuery, - logger: ILogger + logger: ILogger, + var pageQuery: IPageQuery ) : Application( "页面信息", PageView::class.java, - service, query, logger -) \ No newline at end of file + service, pageQuery, logger +) { + + @GetMapping("/in-system/{system}/permission/{role}") + fun withSystemPermission(@PathVariable system: String, @PathVariable role: String): HttpMessage { + return this.safeExecute("获取有权资源列表失败") { msg -> + msg.data = this.pageQuery.withPermission(role, system) + } + } + + @GetMapping("/permission/{role}") + fun withPermission(@PathVariable role: String): HttpMessage { + return this.safeExecute("获取有权资源列表失败") { msg -> + msg.data = this.pageQuery.withPermission(role) + } + } + + @GetMapping("/{page}/authentication/{role}") + fun authentication(@PathVariable page: String, @PathVariable role: String): HttpMessage { + return this.safeExecute("获取权限信息失败") { msg -> + msg.data = this.pageQuery.authentication(page, role) + } + } + + @GetMapping("/authentication/{role}") + fun uriAuthentication(@PathVariable role: String, uri: String): HttpMessage { + return this.safeExecute("获取权限信息失败") { msg -> + msg.data = this.pageQuery.uriAuthentication(uri, role) + } + } + + +} \ 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 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.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/resource/SystemApp.kt b/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/resource/SystemApp.kt index 5112a24..f49ea66 100644 --- a/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/resource/SystemApp.kt +++ b/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/rbac/resource/SystemApp.kt @@ -1,11 +1,14 @@ package com.synebula.zeus.app.controller.rbac.resource import com.synebula.gaea.app.Application +import com.synebula.gaea.app.component.HttpMessage import com.synebula.gaea.log.ILogger import com.synebula.zeus.domain.service.cmd.rbac.resource.SystemCmd import com.synebula.zeus.domain.service.contr.rbac.resource.ISystemService import com.synebula.zeus.query.contr.resouce.ISystemQuery import com.synebula.zeus.query.view.resource.SystemView +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.PathVariable import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RestController @@ -13,9 +16,23 @@ import org.springframework.web.bind.annotation.RestController @RequestMapping("/systems") class SystemApp( service: ISystemService, - query: ISystemQuery, - logger: ILogger + logger: ILogger, + var systemQuery: ISystemQuery ) : Application( "系统信息", SystemView::class.java, - service, query, logger -) \ No newline at end of file + service, systemQuery, logger +) { + @GetMapping("/permission/{role}") + fun withPermission(@PathVariable role: String): HttpMessage { + return this.safeExecute("获取有权资源列表失败") { msg -> + msg.data = this.systemQuery.withPermission(role) + } + } + + @GetMapping("/{system}/authentication/{role}") + fun authentication(@PathVariable system: String, @PathVariable role: String): HttpMessage { + return this.safeExecute("获取权限信息失败") { msg -> + msg.data = this.systemQuery.authentication(system, role) + } + } +} \ No newline at end of file diff --git a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/model/rbac/resource/Interface.kt b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/model/rbac/resource/Interface.kt index 2f4af14..67716a2 100644 --- a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/model/rbac/resource/Interface.kt +++ b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/model/rbac/resource/Interface.kt @@ -3,5 +3,6 @@ package com.synebula.zeus.domain.model.rbac.resource import com.synebula.gaea.domain.model.IAggregateRoot class Interface : Resource(), IAggregateRoot { + var system = "" override var alive = true } \ No newline at end of file diff --git a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/model/rbac/resource/Page.kt b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/model/rbac/resource/Page.kt index 002dd4a..02325bc 100644 --- a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/model/rbac/resource/Page.kt +++ b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/model/rbac/resource/Page.kt @@ -5,16 +5,16 @@ import com.synebula.gaea.domain.model.IAggregateRoot class Page : Resource(), IAggregateRoot { // 上级页面 - val supPage = 0 + var parent = "" // 页面图标 - val icon: String? = null + var icon: String? = null // 附加参数 - val params: String? = null + var params: String? = null // 所属系统 - val system = 0 + var system = "" override var alive = true 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..e07d0a7 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,8 +4,9 @@ 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 + var authority = PermissionType.Allow } \ No newline at end of file diff --git a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/model/rbac/resource/Resource.kt b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/model/rbac/resource/Resource.kt index 93641d3..02bb513 100644 --- a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/model/rbac/resource/Resource.kt +++ b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/model/rbac/resource/Resource.kt @@ -4,8 +4,8 @@ import com.synebula.gaea.domain.model.Entity abstract class Resource(override var id: String? = null) : Entity() { var name = "" - var signature = "" - val uri: String? = null + //资源定位符,唯一标识。可以是uil,也可以是别名 + var uri = "" var order = 0 - var desc = "" + var desc: String? = null } \ No newline at end of file diff --git a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/resource/InterfaceCmd.kt b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/resource/InterfaceCmd.kt index feea2db..05af0c2 100644 --- a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/resource/InterfaceCmd.kt +++ b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/resource/InterfaceCmd.kt @@ -1,5 +1,6 @@ package com.synebula.zeus.domain.service.cmd.rbac.resource class InterfaceCmd : ResourceCmd() { + var system = "" var alive = true } \ No newline at end of file diff --git a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/resource/PageCmd.kt b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/resource/PageCmd.kt index ca87f9f..6e644b1 100644 --- a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/resource/PageCmd.kt +++ b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/resource/PageCmd.kt @@ -3,16 +3,16 @@ package com.synebula.zeus.domain.service.cmd.rbac.resource class PageCmd : ResourceCmd() { // 上级页面 - val supPage = 0 + var parent = "" // 页面图标 - val icon: String? = null + var icon: String? = null // 附加参数 - val params: String? = null + var params: String? = null // 所属系统 - val system = 0 + var system = "" var alive = true 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..b23a80b 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,7 +6,8 @@ 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 + var authority = PermissionType.Allow } \ No newline at end of file diff --git a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/resource/ResourceCmd.kt b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/resource/ResourceCmd.kt index 0d54519..22c3fd8 100644 --- a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/resource/ResourceCmd.kt +++ b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/resource/ResourceCmd.kt @@ -5,8 +5,8 @@ import com.synebula.gaea.domain.service.Command abstract class ResourceCmd(var id: String? = null) : Command() { var name = "" - var signature = "" - val uri: String? = null + //资源定位符,唯一标识。可以是uil,也可以是别名 + var uri = "" var order = 0 - var desc = "" + var desc: String? = null } \ 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 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..8380b4f 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,14 @@ 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 withPermission(role: String, system: 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..9681ebf 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,16 @@ 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 withPermission(role: String, system: String? ): List + + fun authentication(resource: String, role: String): PermissionType? + + fun uriAuthentication(path: 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..2b3d781 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..6b3c130 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..b8d2252 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,42 @@ 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.contr.resouce.IPermissionQuery +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) : MongoQuery(template), IInterfaceQuery { +class InterfaceQuery(template: MongoTemplate, var permissionQuery: IPermissionQuery, var systemQuery: ISystemQuery) : + MongoQuery(template), + IInterfaceQuery { + + private val clazz = InterfaceView::class.java + + override fun withPermission(role: String): List { + return this.withPermission(role, null) + + } + + override fun withPermission(role: String, system: String?): List { + if (system != null) { + val permission = this.systemQuery.authentication(system, role) + if (permission == PermissionType.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) + return interfaces.filter { i -> + val permission = permissions.find { p -> i.id == p.resource } + permission == null || permission.authority == 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..5e1fd92 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,47 @@ 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.contr.resouce.IPermissionQuery +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) : MongoQuery(template), IPageQuery { +class PageQuery(template: MongoTemplate, var permissionQuery: IPermissionQuery, var systemQuery: ISystemQuery) : + MongoQuery(template), IPageQuery { + private val clazz = PageView::class.java + + override fun withPermission(role: String): List { + return this.withPermission(role, null) + } + + override fun withPermission(role: String, system: String?): List { + if (system != null) { + val permission = this.systemQuery.authentication(system, role) + if (permission == PermissionType.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) + return pages.filter { i -> + val permission = permissions.find { p -> i.id == p.resource } + permission == null || permission.authority == PermissionType.Allow + } + } + + override fun authentication(resource: String, role: String): PermissionType? { + return this.permissionQuery.authentication(ResourceType.Page, resource, role) + } + + override fun uriAuthentication(path: String, role: String): PermissionType? { + val page = this.template.findOne(Query.query(Criteria.where("uri").`is`(path)), + this.clazz, this.collection(this.clazz)) ?: return null + return this.authentication(page.id!!, 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..520a5d3 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("type").`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("type").`is`(resourceType) + .and("resource").`is`(resource) + .and("role").`is`(role) + ), this.clazz, this.collection) + return permission?.authority + } +} \ 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..3610547 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 }?.authority == 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/InterfaceView.kt b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/view/resource/InterfaceView.kt index 09ad1ed..3153305 100644 --- a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/view/resource/InterfaceView.kt +++ b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/view/resource/InterfaceView.kt @@ -1,5 +1,6 @@ package com.synebula.zeus.query.view.resource class InterfaceView : ResourceView() { + var system = "" var alive = true } \ No newline at end of file diff --git a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/view/resource/PageView.kt b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/view/resource/PageView.kt index 513a87e..43c27d6 100644 --- a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/view/resource/PageView.kt +++ b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/view/resource/PageView.kt @@ -3,16 +3,16 @@ package com.synebula.zeus.query.view.resource class PageView : ResourceView() { // 上级页面 - val supPage = 0 + var parent = "" // 页面图标 - val icon: String? = null + var icon: String? = null // 附加参数 - val params: String? = null + var params: String? = null // 所属系统 - val system = 0 + var system = "" var alive = true 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..2031afd 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,7 +5,8 @@ import com.synebula.zeus.env.ResourceType class PermissionView() { var id: String? = null + var role = "" var resource = "" var type: ResourceType? = null - var authorization = PermissionType.Allow + var authority = PermissionType.Allow } \ No newline at end of file diff --git a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/view/resource/ResourceView.kt b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/view/resource/ResourceView.kt index 57d512d..f6a65c6 100644 --- a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/view/resource/ResourceView.kt +++ b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/view/resource/ResourceView.kt @@ -3,8 +3,8 @@ package com.synebula.zeus.query.view.resource abstract class ResourceView(var id: String? = null) { var name = "" - var signature = "" - val uri: String? = null + //资源定位符,唯一标识。可以是uil,也可以是别名 + var uri = "" var order = 0 - var desc = "" + var desc: String? = null } \ No newline at end of file