增加权限判断方法
This commit is contained in:
@@ -17,13 +17,13 @@ import org.springframework.data.mongodb.core.MongoTemplate
|
|||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
open class ZeusBeans {
|
open class ZeusBeans {
|
||||||
@Primary
|
|
||||||
@Bean
|
@Bean
|
||||||
|
@Primary
|
||||||
open fun <T : IAggregateRoot<String>> repository(template: MongoTemplate)
|
open fun <T : IAggregateRoot<String>> repository(template: MongoTemplate)
|
||||||
: IRepository = MongoRepository(template)
|
: IRepository = MongoRepository(template)
|
||||||
|
|
||||||
@Primary
|
|
||||||
@Bean
|
@Bean
|
||||||
|
@Primary
|
||||||
open fun <T> query(template: MongoTemplate, logger: ILogger? = null)
|
open fun <T> query(template: MongoTemplate, logger: ILogger? = null)
|
||||||
: IQuery = MongoQuery(template, logger)
|
: IQuery = MongoQuery(template, logger)
|
||||||
|
|
||||||
|
|||||||
@@ -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.cmd.rbac.GroupCmd
|
||||||
import com.synebula.zeus.domain.service.contr.rbac.IGroupService
|
import com.synebula.zeus.domain.service.contr.rbac.IGroupService
|
||||||
import com.synebula.zeus.query.view.GroupView
|
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.RequestMapping
|
||||||
import org.springframework.web.bind.annotation.RestController
|
import org.springframework.web.bind.annotation.RestController
|
||||||
|
|
||||||
|
|||||||
@@ -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.cmd.rbac.RoleCmd
|
||||||
import com.synebula.zeus.domain.service.contr.rbac.IRoleService
|
import com.synebula.zeus.domain.service.contr.rbac.IRoleService
|
||||||
import com.synebula.zeus.query.view.RoleView
|
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.RequestMapping
|
||||||
import org.springframework.web.bind.annotation.RestController
|
import org.springframework.web.bind.annotation.RestController
|
||||||
|
|
||||||
|
|||||||
@@ -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.domain.service.contr.rbac.IUserService
|
||||||
import com.synebula.zeus.query.view.UserView
|
import com.synebula.zeus.query.view.UserView
|
||||||
import org.springframework.beans.factory.annotation.Autowired
|
import org.springframework.beans.factory.annotation.Autowired
|
||||||
import org.springframework.beans.factory.annotation.Qualifier
|
|
||||||
import org.springframework.web.bind.annotation.*
|
import org.springframework.web.bind.annotation.*
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/users")
|
@RequestMapping("/users")
|
||||||
class UserApp(
|
class UserApp(
|
||||||
service: IUserService,
|
service: IUserService,
|
||||||
@Qualifier("query") query: IQuery,
|
query: IQuery,
|
||||||
logger: ILogger
|
logger: ILogger
|
||||||
) : Application<UserCmd, UserView, String>(
|
) : Application<UserCmd, UserView, String>(
|
||||||
"用户信息", UserView::class.java,
|
"用户信息", UserView::class.java,
|
||||||
|
|||||||
@@ -2,13 +2,9 @@ package com.synebula.zeus.app.controller.rbac.resource
|
|||||||
|
|
||||||
import com.synebula.gaea.app.Application
|
import com.synebula.gaea.app.Application
|
||||||
import com.synebula.gaea.log.ILogger
|
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.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.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.contr.resouce.IPermissionQuery
|
||||||
import com.synebula.zeus.query.view.resource.PageView
|
|
||||||
import com.synebula.zeus.query.view.resource.PermissionView
|
import com.synebula.zeus.query.view.resource.PermissionView
|
||||||
import org.springframework.web.bind.annotation.RequestMapping
|
import org.springframework.web.bind.annotation.RequestMapping
|
||||||
import org.springframework.web.bind.annotation.RestController
|
import org.springframework.web.bind.annotation.RestController
|
||||||
@@ -16,10 +12,10 @@ import org.springframework.web.bind.annotation.RestController
|
|||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/permissions")
|
@RequestMapping("/permissions")
|
||||||
class PermissionApp(
|
class PermissionApp(
|
||||||
service: IPermissionService,
|
service: IPermissionService,
|
||||||
query: IPermissionQuery,
|
query: IPermissionQuery,
|
||||||
logger: ILogger
|
logger: ILogger
|
||||||
) : Application<PermissionCmd, PermissionView, String>(
|
) : Application<PermissionCmd, PermissionView, String>(
|
||||||
"权限信息", PermissionView::class.java,
|
"权限信息", PermissionView::class.java,
|
||||||
service, query, logger
|
service, query, logger
|
||||||
)
|
)
|
||||||
@@ -4,7 +4,8 @@ import com.synebula.gaea.domain.model.AggregateRoot
|
|||||||
import com.synebula.zeus.env.PermissionType
|
import com.synebula.zeus.env.PermissionType
|
||||||
import com.synebula.zeus.env.ResourceType
|
import com.synebula.zeus.env.ResourceType
|
||||||
|
|
||||||
class Permission(override var id: String?) : AggregateRoot<String>() {
|
class Permission(override var id: String? = null) : AggregateRoot<String>() {
|
||||||
|
var role = ""
|
||||||
var resource = ""
|
var resource = ""
|
||||||
var type: ResourceType? = null
|
var type: ResourceType? = null
|
||||||
var authorization = PermissionType.Allow
|
var authorization = PermissionType.Allow
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import com.synebula.zeus.env.ResourceType
|
|||||||
|
|
||||||
class PermissionCmd : Command() {
|
class PermissionCmd : Command() {
|
||||||
var id: String? = null
|
var id: String? = null
|
||||||
|
var role = ""
|
||||||
var resource = ""
|
var resource = ""
|
||||||
var type: ResourceType? = null
|
var type: ResourceType? = null
|
||||||
var authorization = PermissionType.Allow
|
var authorization = PermissionType.Allow
|
||||||
|
|||||||
@@ -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, String>(Permission::class.java, repository, converter, logger), IPermissionService
|
||||||
@@ -1,6 +1,12 @@
|
|||||||
package com.synebula.zeus.query.contr.resouce
|
package com.synebula.zeus.query.contr.resouce
|
||||||
|
|
||||||
import com.synebula.gaea.query.IQuery
|
import com.synebula.gaea.query.IQuery
|
||||||
|
import com.synebula.zeus.env.PermissionType
|
||||||
|
import com.synebula.zeus.query.view.resource.InterfaceView
|
||||||
|
|
||||||
interface IInterfaceQuery : IQuery {
|
interface IInterfaceQuery : IQuery {
|
||||||
|
|
||||||
|
fun withPermission(role: String): List<InterfaceView>
|
||||||
|
|
||||||
|
fun authentication(resource: String, role: String): PermissionType
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,12 @@
|
|||||||
package com.synebula.zeus.query.contr.resouce
|
package com.synebula.zeus.query.contr.resouce
|
||||||
|
|
||||||
import com.synebula.gaea.query.IQuery
|
import com.synebula.gaea.query.IQuery
|
||||||
|
import com.synebula.zeus.env.PermissionType
|
||||||
|
import com.synebula.zeus.query.view.resource.PageView
|
||||||
|
|
||||||
interface IPageQuery : IQuery {
|
interface IPageQuery : IQuery {
|
||||||
|
|
||||||
|
fun withPermission(role: String): List<PageView>
|
||||||
|
|
||||||
|
fun authentication(resource: String, role: String): PermissionType
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,13 @@
|
|||||||
package com.synebula.zeus.query.contr.resouce
|
package com.synebula.zeus.query.contr.resouce
|
||||||
|
|
||||||
import com.synebula.gaea.query.IQuery
|
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 {
|
interface IPermissionQuery : IQuery {
|
||||||
|
|
||||||
|
fun resourcePermissions(resourceType: ResourceType, role: String): List<PermissionView>
|
||||||
|
|
||||||
|
fun authentication(resourceType: ResourceType, resource: String, role: String): PermissionType
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,12 @@
|
|||||||
package com.synebula.zeus.query.contr.resouce
|
package com.synebula.zeus.query.contr.resouce
|
||||||
|
|
||||||
import com.synebula.gaea.query.IQuery
|
import com.synebula.gaea.query.IQuery
|
||||||
|
import com.synebula.zeus.env.PermissionType
|
||||||
|
import com.synebula.zeus.query.view.resource.SystemView
|
||||||
|
|
||||||
interface ISystemQuery : IQuery {
|
interface ISystemQuery : IQuery {
|
||||||
|
|
||||||
|
fun withPermission(role: String): List<SystemView>
|
||||||
|
|
||||||
|
fun authentication(resource: String, role: String): PermissionType
|
||||||
}
|
}
|
||||||
@@ -1,8 +1,23 @@
|
|||||||
package com.synebula.zeus.query.impl.resouce
|
package com.synebula.zeus.query.impl.resouce
|
||||||
|
|
||||||
import com.synebula.gaea.mongo.query.MongoQuery
|
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.IInterfaceQuery
|
||||||
|
import com.synebula.zeus.query.view.resource.InterfaceView
|
||||||
import org.springframework.data.mongodb.core.MongoTemplate
|
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<InterfaceView> {
|
||||||
|
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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,8 +1,22 @@
|
|||||||
package com.synebula.zeus.query.impl.resouce
|
package com.synebula.zeus.query.impl.resouce
|
||||||
|
|
||||||
import com.synebula.gaea.mongo.query.MongoQuery
|
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.IPageQuery
|
||||||
|
import com.synebula.zeus.query.view.resource.PageView
|
||||||
import org.springframework.data.mongodb.core.MongoTemplate
|
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<PageView> {
|
||||||
|
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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,8 +1,33 @@
|
|||||||
package com.synebula.zeus.query.impl.resouce
|
package com.synebula.zeus.query.impl.resouce
|
||||||
|
|
||||||
import com.synebula.gaea.mongo.query.MongoQuery
|
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.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.MongoTemplate
|
||||||
|
import org.springframework.data.mongodb.core.query.Criteria
|
||||||
|
import org.springframework.data.mongodb.core.query.Query
|
||||||
|
|
||||||
class PermissionQuery(template: MongoTemplate) : MongoQuery(template), IPermissionQuery
|
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<PermissionView> {
|
||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,7 +1,22 @@
|
|||||||
package com.synebula.zeus.query.impl.resouce
|
package com.synebula.zeus.query.impl.resouce
|
||||||
|
|
||||||
import com.synebula.gaea.mongo.query.MongoQuery
|
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.contr.resouce.ISystemQuery
|
||||||
|
import com.synebula.zeus.query.view.resource.SystemView
|
||||||
import org.springframework.data.mongodb.core.MongoTemplate
|
import org.springframework.data.mongodb.core.MongoTemplate
|
||||||
|
|
||||||
class SystemQuery(template: MongoTemplate) : MongoQuery(template), ISystemQuery
|
class SystemQuery(template: MongoTemplate, var permissionQuery: PermissionQuery) : MongoQuery(template), ISystemQuery {
|
||||||
|
private val clazz = SystemView::class.java
|
||||||
|
|
||||||
|
override fun withPermission(role: String): List<SystemView> {
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,6 +5,7 @@ import com.synebula.zeus.env.ResourceType
|
|||||||
|
|
||||||
class PermissionView() {
|
class PermissionView() {
|
||||||
var id: String? = null
|
var id: String? = null
|
||||||
|
var role = ""
|
||||||
var resource = ""
|
var resource = ""
|
||||||
var type: ResourceType? = null
|
var type: ResourceType? = null
|
||||||
var authorization = PermissionType.Allow
|
var authorization = PermissionType.Allow
|
||||||
|
|||||||
Reference in New Issue
Block a user