增加权限判断方法

This commit is contained in:
2020-11-01 16:34:07 +08:00
parent b99a685339
commit e09d2db2b8
17 changed files with 124 additions and 21 deletions

View File

@@ -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<InterfaceView>
fun authentication(resource: String, role: String): PermissionType
}

View File

@@ -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<PageView>
fun authentication(resource: String, role: String): PermissionType
}

View File

@@ -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<PermissionView>
fun authentication(resourceType: ResourceType, resource: String, role: String): PermissionType
}

View File

@@ -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<SystemView>
fun authentication(resource: String, role: String): PermissionType
}

View File

@@ -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<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)
}
}

View File

@@ -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<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)
}
}

View File

@@ -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
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
}
}

View File

@@ -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
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)
}
}

View File

@@ -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