调整app包结构
This commit is contained in:
@@ -0,0 +1,8 @@
|
|||||||
|
package com.synebula.gaea.app.autoconfig
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.ComponentScan
|
||||||
|
import org.springframework.context.annotation.Configuration
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@ComponentScan(basePackages = ["com.synebula.gaea.app.bus", "com.synebula.gaea.app.component", "com.synebula.gaea.app.security"])
|
||||||
|
class AppAutoConfiguration
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.synebula.gaea.app.component.bus
|
package com.synebula.gaea.app.bus
|
||||||
|
|
||||||
import com.synebula.gaea.bus.Bus
|
import com.synebula.gaea.bus.Bus
|
||||||
import org.springframework.stereotype.Component
|
import org.springframework.stereotype.Component
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.synebula.gaea.app.component.bus
|
package com.synebula.gaea.app.bus
|
||||||
|
|
||||||
import com.synebula.gaea.bus.DomainSubscribe
|
import com.synebula.gaea.bus.DomainSubscribe
|
||||||
import com.synebula.gaea.bus.IBus
|
import com.synebula.gaea.bus.IBus
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.synebula.gaea.app.component.cache
|
package com.synebula.gaea.app.cache
|
||||||
|
|
||||||
import com.google.common.cache.Cache
|
import com.google.common.cache.Cache
|
||||||
import com.google.common.cache.CacheBuilder
|
import com.google.common.cache.CacheBuilder
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
package com.synebula.gaea.app.component.poi
|
package com.synebula.gaea.app.component.poi
|
||||||
|
|
||||||
import com.synebula.gaea.app.struct.ExcelData
|
|
||||||
import com.synebula.gaea.data.date.DateTime
|
import com.synebula.gaea.data.date.DateTime
|
||||||
import com.synebula.gaea.exception.NoticeUserException
|
import com.synebula.gaea.exception.NoticeUserException
|
||||||
import org.apache.poi.hpsf.Decimal
|
import org.apache.poi.hpsf.Decimal
|
||||||
@@ -40,7 +39,7 @@ object Excel {
|
|||||||
val titleFont = wb.createFont()
|
val titleFont = wb.createFont()
|
||||||
titleFont.bold = true
|
titleFont.bold = true
|
||||||
titleStyle.setFont(titleFont)
|
titleStyle.setFont(titleFont)
|
||||||
setBorderStyle(titleStyle, BorderStyle.THIN)
|
setBorderStyle(titleStyle)
|
||||||
|
|
||||||
//声明列对象
|
//声明列对象
|
||||||
// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制
|
// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制
|
||||||
@@ -62,7 +61,7 @@ object Excel {
|
|||||||
val contentStyle = wb.createCellStyle()
|
val contentStyle = wb.createCellStyle()
|
||||||
contentStyle.alignment = HorizontalAlignment.LEFT// 创建一个修改居左格式
|
contentStyle.alignment = HorizontalAlignment.LEFT// 创建一个修改居左格式
|
||||||
contentStyle.verticalAlignment = VerticalAlignment.CENTER
|
contentStyle.verticalAlignment = VerticalAlignment.CENTER
|
||||||
setBorderStyle(contentStyle, BorderStyle.THIN)
|
setBorderStyle(contentStyle)
|
||||||
|
|
||||||
//创建内容
|
//创建内容
|
||||||
var col = 0
|
var col = 0
|
||||||
@@ -146,6 +145,7 @@ object Excel {
|
|||||||
this.getCellValue(cell, evaluator).toString().toIntOrNull()
|
this.getCellValue(cell, evaluator).toString().toIntOrNull()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Double::class.java.name -> {
|
Double::class.java.name -> {
|
||||||
if (cell.cellType == CellType.NUMERIC) {
|
if (cell.cellType == CellType.NUMERIC) {
|
||||||
cell.numericCellValue
|
cell.numericCellValue
|
||||||
@@ -153,6 +153,7 @@ object Excel {
|
|||||||
this.getCellValue(cell, evaluator).toString().toDoubleOrNull()
|
this.getCellValue(cell, evaluator).toString().toDoubleOrNull()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Float::class.java.name -> {
|
Float::class.java.name -> {
|
||||||
if (cell.cellType == CellType.NUMERIC) {
|
if (cell.cellType == CellType.NUMERIC) {
|
||||||
cell.numericCellValue.toFloat()
|
cell.numericCellValue.toFloat()
|
||||||
@@ -160,6 +161,7 @@ object Excel {
|
|||||||
this.getCellValue(cell, evaluator).toString().toFloatOrNull()
|
this.getCellValue(cell, evaluator).toString().toFloatOrNull()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Decimal::class.java.name -> {
|
Decimal::class.java.name -> {
|
||||||
if (cell.cellType == CellType.NUMERIC) {
|
if (cell.cellType == CellType.NUMERIC) {
|
||||||
cell.numericCellValue.toBigDecimal()
|
cell.numericCellValue.toBigDecimal()
|
||||||
@@ -167,6 +169,7 @@ object Excel {
|
|||||||
this.getCellValue(cell, evaluator).toString().toBigDecimalOrNull()
|
this.getCellValue(cell, evaluator).toString().toBigDecimalOrNull()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Boolean::class.java.name -> {
|
Boolean::class.java.name -> {
|
||||||
if (cell.cellType == CellType.BOOLEAN) {
|
if (cell.cellType == CellType.BOOLEAN) {
|
||||||
cell.booleanCellValue
|
cell.booleanCellValue
|
||||||
@@ -174,11 +177,13 @@ object Excel {
|
|||||||
this.getCellValue(cell, evaluator).toString().toBoolean()
|
this.getCellValue(cell, evaluator).toString().toBoolean()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Date::class.java.name -> try {
|
Date::class.java.name -> try {
|
||||||
cell.dateCellValue
|
cell.dateCellValue
|
||||||
} catch (ignored: Exception) {
|
} catch (ignored: Exception) {
|
||||||
DateTime(cell.stringCellValue).date
|
DateTime(cell.stringCellValue).date
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> cell.stringCellValue
|
else -> cell.stringCellValue
|
||||||
}
|
}
|
||||||
rowData[columns[c].first] = value
|
rowData[columns[c].first] = value
|
||||||
@@ -278,7 +283,7 @@ object Excel {
|
|||||||
/**
|
/**
|
||||||
* 设置cell style的边框
|
* 设置cell style的边框
|
||||||
*/
|
*/
|
||||||
private fun setBorderStyle(style: HSSFCellStyle, borderStyle: BorderStyle) {
|
private fun setBorderStyle(style: HSSFCellStyle, borderStyle: BorderStyle = BorderStyle.THIN) {
|
||||||
style.borderTop = borderStyle
|
style.borderTop = borderStyle
|
||||||
style.borderRight = borderStyle
|
style.borderRight = borderStyle
|
||||||
style.borderBottom = borderStyle
|
style.borderBottom = borderStyle
|
||||||
@@ -297,6 +302,7 @@ object Excel {
|
|||||||
numericCellValue
|
numericCellValue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CellType.STRING -> cell.richStringCellValue.string
|
CellType.STRING -> cell.richStringCellValue.string
|
||||||
CellType.BLANK -> ""
|
CellType.BLANK -> ""
|
||||||
CellType.FORMULA -> evaluator.evaluate(cell).toString()
|
CellType.FORMULA -> evaluator.evaluate(cell).toString()
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package com.synebula.gaea.app.component.poi
|
||||||
|
|
||||||
|
class ExcelData(
|
||||||
|
var title: String = "",
|
||||||
|
var columnNames: List<String> = listOf(),
|
||||||
|
var data: List<List<String>> = listOf()
|
||||||
|
)
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.synebula.gaea.app
|
package com.synebula.gaea.app.controller
|
||||||
|
|
||||||
import com.synebula.gaea.app.cmd.ICommandApp
|
import com.synebula.gaea.app.controller.cmd.ICommandApp
|
||||||
import com.synebula.gaea.app.query.IQueryApp
|
import com.synebula.gaea.app.controller.query.IQueryApp
|
||||||
import com.synebula.gaea.data.message.HttpMessageFactory
|
import com.synebula.gaea.data.message.HttpMessageFactory
|
||||||
import com.synebula.gaea.domain.service.ICommand
|
import com.synebula.gaea.domain.service.ICommand
|
||||||
import com.synebula.gaea.domain.service.IService
|
import com.synebula.gaea.domain.service.IService
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.synebula.gaea.app
|
package com.synebula.gaea.app.controller
|
||||||
|
|
||||||
import com.synebula.gaea.app.component.security.session.UserSession
|
import com.synebula.gaea.app.security.session.UserSession
|
||||||
import com.synebula.gaea.data.message.HttpMessage
|
import com.synebula.gaea.data.message.HttpMessage
|
||||||
import com.synebula.gaea.data.message.HttpMessageFactory
|
import com.synebula.gaea.data.message.HttpMessageFactory
|
||||||
import com.synebula.gaea.data.message.Status
|
import com.synebula.gaea.data.message.Status
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.synebula.gaea.app
|
package com.synebula.gaea.app.controller
|
||||||
|
|
||||||
import com.synebula.gaea.app.cmd.ISimpleCommandApp
|
import com.synebula.gaea.app.controller.cmd.ISimpleCommandApp
|
||||||
import com.synebula.gaea.app.query.IQueryApp
|
import com.synebula.gaea.app.controller.query.IQueryApp
|
||||||
import com.synebula.gaea.data.message.HttpMessageFactory
|
import com.synebula.gaea.data.message.HttpMessageFactory
|
||||||
import com.synebula.gaea.domain.model.IAggregateRoot
|
import com.synebula.gaea.domain.model.IAggregateRoot
|
||||||
import com.synebula.gaea.domain.service.ISimpleService
|
import com.synebula.gaea.domain.service.ISimpleService
|
||||||
@@ -27,4 +27,4 @@ open class SimpleApplication<TRoot : IAggregateRoot<ID>, ID>(
|
|||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
override lateinit var httpMessageFactory: HttpMessageFactory
|
override lateinit var httpMessageFactory: HttpMessageFactory
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.synebula.gaea.app.cmd
|
package com.synebula.gaea.app.controller.cmd
|
||||||
|
|
||||||
import com.synebula.gaea.data.message.HttpMessageFactory
|
import com.synebula.gaea.data.message.HttpMessageFactory
|
||||||
import com.synebula.gaea.domain.service.ICommand
|
import com.synebula.gaea.domain.service.ICommand
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.synebula.gaea.app.cmd
|
package com.synebula.gaea.app.controller.cmd
|
||||||
|
|
||||||
import com.synebula.gaea.app.IApplication
|
import com.synebula.gaea.app.controller.IApplication
|
||||||
import com.synebula.gaea.data.message.HttpMessage
|
import com.synebula.gaea.data.message.HttpMessage
|
||||||
import com.synebula.gaea.data.message.Status
|
import com.synebula.gaea.data.message.Status
|
||||||
import com.synebula.gaea.domain.service.ICommand
|
import com.synebula.gaea.domain.service.ICommand
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.synebula.gaea.app.cmd
|
package com.synebula.gaea.app.controller.cmd
|
||||||
|
|
||||||
import com.synebula.gaea.app.IApplication
|
import com.synebula.gaea.app.controller.IApplication
|
||||||
import com.synebula.gaea.data.message.HttpMessage
|
import com.synebula.gaea.data.message.HttpMessage
|
||||||
import com.synebula.gaea.data.message.Status
|
import com.synebula.gaea.data.message.Status
|
||||||
import com.synebula.gaea.domain.model.IAggregateRoot
|
import com.synebula.gaea.domain.model.IAggregateRoot
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.synebula.gaea.app.cmd
|
package com.synebula.gaea.app.controller.cmd
|
||||||
|
|
||||||
import com.synebula.gaea.data.message.HttpMessageFactory
|
import com.synebula.gaea.data.message.HttpMessageFactory
|
||||||
import com.synebula.gaea.domain.model.IAggregateRoot
|
import com.synebula.gaea.domain.model.IAggregateRoot
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.synebula.gaea.app.query
|
package com.synebula.gaea.app.controller.query
|
||||||
|
|
||||||
import com.synebula.gaea.app.IApplication
|
import com.synebula.gaea.app.controller.IApplication
|
||||||
import com.synebula.gaea.data.message.HttpMessage
|
import com.synebula.gaea.data.message.HttpMessage
|
||||||
import com.synebula.gaea.query.IQuery
|
import com.synebula.gaea.query.IQuery
|
||||||
import com.synebula.gaea.query.Params
|
import com.synebula.gaea.query.Params
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.synebula.gaea.app.query
|
package com.synebula.gaea.app.controller.query
|
||||||
|
|
||||||
import com.synebula.gaea.data.message.HttpMessageFactory
|
import com.synebula.gaea.data.message.HttpMessageFactory
|
||||||
import com.synebula.gaea.log.ILogger
|
import com.synebula.gaea.log.ILogger
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
package com.synebula.gaea.app.component.security
|
package com.synebula.gaea.app.security
|
||||||
|
|
||||||
import com.auth0.jwt.JWT
|
import com.auth0.jwt.JWT
|
||||||
import com.auth0.jwt.algorithms.Algorithm
|
import com.auth0.jwt.algorithms.Algorithm
|
||||||
|
import com.auth0.jwt.exceptions.TokenExpiredException
|
||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
import com.synebula.gaea.app.struct.exception.TokenCloseExpireException
|
|
||||||
import com.synebula.gaea.log.ILogger
|
import com.synebula.gaea.log.ILogger
|
||||||
import org.springframework.beans.factory.annotation.Autowired
|
import org.springframework.beans.factory.annotation.Autowired
|
||||||
import org.springframework.beans.factory.annotation.Value
|
import org.springframework.beans.factory.annotation.Value
|
||||||
@@ -71,6 +71,25 @@ class TokenManager {
|
|||||||
.sign(algorithm)
|
.sign(algorithm)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校验token是否正确
|
||||||
|
*
|
||||||
|
* @param token 密钥
|
||||||
|
* @param func 自定义验证方法
|
||||||
|
*/
|
||||||
|
fun verifyTime(token: String, func: (total: Long, remain: Long) -> Unit) {
|
||||||
|
try {
|
||||||
|
val now = Date()
|
||||||
|
val jwt = JWT.decode(token)
|
||||||
|
val total = jwt.expiresAt.time - jwt.issuedAt.time //总时间
|
||||||
|
val remain = jwt.expiresAt.time - now.time //剩余的时间
|
||||||
|
func(total, remain)
|
||||||
|
} catch (ex: Exception) {
|
||||||
|
this.logger.error(this, ex, "解析token出错")
|
||||||
|
throw ex
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 校验token是否正确
|
* 校验token是否正确
|
||||||
*
|
*
|
||||||
@@ -78,21 +97,16 @@ class TokenManager {
|
|||||||
* @return 是否正确
|
* @return 是否正确
|
||||||
*/
|
*/
|
||||||
fun <T> verify(token: String, clazz: Class<T>): T? {
|
fun <T> verify(token: String, clazz: Class<T>): T? {
|
||||||
try {
|
return try {
|
||||||
val now = Date()
|
|
||||||
val algorithm = Algorithm.HMAC256(secret)
|
val algorithm = Algorithm.HMAC256(secret)
|
||||||
val jwt = JWT.decode(token)
|
|
||||||
val remain = jwt.expiresAt.time - now.time //剩余的时间
|
|
||||||
val total = jwt.expiresAt.time - jwt.issuedAt.time //总时间
|
|
||||||
if (remain > 0 && 1.0 * remain / total <= 0.3) //存活时间少于总时间的1/3重新下发
|
|
||||||
throw TokenCloseExpireException("", JWT.decode(token).getClaim("user").asString())
|
|
||||||
|
|
||||||
val result = JWT.require(algorithm).build().verify(token)
|
val result = JWT.require(algorithm).build().verify(token)
|
||||||
val json = result.getClaim(this.payload).asString()
|
val json = result.getClaim(this.payload).asString()
|
||||||
return gson.fromJson(json, clazz)
|
gson.fromJson(json, clazz)
|
||||||
|
} catch (ex: TokenExpiredException) {
|
||||||
|
null
|
||||||
} catch (ex: Exception) {
|
} catch (ex: Exception) {
|
||||||
this.logger.debug(this, ex, "解析token出错")
|
this.logger.error(this, ex, "解析token出错")
|
||||||
throw ex
|
throw ex
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -103,20 +117,15 @@ class TokenManager {
|
|||||||
* @return 是否正确
|
* @return 是否正确
|
||||||
*/
|
*/
|
||||||
fun verify(token: String): String {
|
fun verify(token: String): String {
|
||||||
try {
|
return try {
|
||||||
val now = Date()
|
|
||||||
val algorithm = Algorithm.HMAC256(secret)
|
val algorithm = Algorithm.HMAC256(secret)
|
||||||
val jwt = JWT.decode(token)
|
|
||||||
val remain = jwt.expiresAt.time - now.time //剩余的时间
|
|
||||||
val total = jwt.expiresAt.time - jwt.issuedAt.time //总时间
|
|
||||||
if (remain > 0 && 1.0 * remain / total <= 0.3) //存活时间少于总时间的1/3重新下发
|
|
||||||
throw TokenCloseExpireException("", JWT.decode(token).getClaim("user").asString())
|
|
||||||
|
|
||||||
val result = JWT.require(algorithm).build().verify(token)
|
val result = JWT.require(algorithm).build().verify(token)
|
||||||
return result.getClaim(payload).asString()
|
result.getClaim(this.payload).asString()
|
||||||
|
} catch (ex: TokenExpiredException) {
|
||||||
|
""
|
||||||
} catch (ex: Exception) {
|
} catch (ex: Exception) {
|
||||||
this.logger.debug(this, ex, "解析token出错")
|
this.logger.error(this, ex, "解析token出错")
|
||||||
throw ex
|
throw ex
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.synebula.gaea.app.component.security
|
package com.synebula.gaea.app.security
|
||||||
|
|
||||||
import com.synebula.gaea.app.component.security.session.UserSessionManager
|
import com.synebula.gaea.app.security.session.UserSessionManager
|
||||||
import com.synebula.gaea.data.message.HttpMessageFactory
|
import com.synebula.gaea.data.message.HttpMessageFactory
|
||||||
import com.synebula.gaea.data.message.Status
|
import com.synebula.gaea.data.message.Status
|
||||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken
|
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken
|
||||||
@@ -40,7 +40,9 @@ class WebAuthorization(
|
|||||||
val identity = if (this.storage == "cookie") {
|
val identity = if (this.storage == "cookie") {
|
||||||
request.cookies.find { it.name == tokenKey }?.value ?: ""
|
request.cookies.find { it.name == tokenKey }?.value ?: ""
|
||||||
} else {
|
} else {
|
||||||
request.getHeader(tokenKey) ?: ""
|
var token = request.getHeader(tokenKey) ?: ""
|
||||||
|
if (token.isEmpty()) token = request.getParameter(tokenKey) ?: ""
|
||||||
|
token
|
||||||
}
|
}
|
||||||
val user = this.userSessionManager.userSession(identity)
|
val user = this.userSessionManager.userSession(identity)
|
||||||
if (user != null) {
|
if (user != null) {
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.synebula.gaea.app.component.security
|
package com.synebula.gaea.app.security
|
||||||
|
|
||||||
import com.synebula.gaea.app.component.security.session.UserSessionManager
|
import com.synebula.gaea.app.security.session.UserSessionManager
|
||||||
import com.synebula.gaea.data.message.HttpMessageFactory
|
import com.synebula.gaea.data.message.HttpMessageFactory
|
||||||
import com.synebula.gaea.data.message.Status
|
import com.synebula.gaea.data.message.Status
|
||||||
import org.springframework.beans.factory.annotation.Autowired
|
import org.springframework.beans.factory.annotation.Autowired
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.synebula.gaea.app.security.session
|
||||||
|
|
||||||
|
import com.synebula.gaea.data.permission.AuthorityType
|
||||||
|
import com.synebula.gaea.data.permission.PermissionType
|
||||||
|
|
||||||
|
open class User {
|
||||||
|
/**
|
||||||
|
* 权限类型, 根据类型来动态应用[permissions]中的权限信息. 通常配置在角色中
|
||||||
|
*/
|
||||||
|
var permissionType = PermissionType.Minimum
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户的权限信息. 通常通过角色配置
|
||||||
|
*/
|
||||||
|
var permissions = mapOf<String, AuthorityType>()
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.synebula.gaea.app.component.security.session
|
package com.synebula.gaea.app.security.session
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 登陆用户会话信息
|
* 登陆用户会话信息
|
||||||
@@ -27,7 +27,7 @@ class UserSession(var uid: String, var user: Any) {
|
|||||||
* 获取指定类型的用户信息
|
* 获取指定类型的用户信息
|
||||||
*/
|
*/
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
fun <T> user(): T {
|
fun <T : User> user(): T {
|
||||||
return user as T
|
return user as T
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.synebula.gaea.app.component.security.session
|
package com.synebula.gaea.app.security.session
|
||||||
|
|
||||||
import com.synebula.gaea.app.component.cache.Cache
|
import com.synebula.gaea.app.cache.Cache
|
||||||
import com.synebula.gaea.ext.toMd5
|
import com.synebula.gaea.ext.toMd5
|
||||||
import org.springframework.beans.factory.annotation.Value
|
import org.springframework.beans.factory.annotation.Value
|
||||||
import org.springframework.stereotype.Component
|
import org.springframework.stereotype.Component
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
package com.synebula.gaea.app.struct
|
|
||||||
|
|
||||||
class ExcelData(var title: String = "",
|
|
||||||
var columnNames: List<String> = listOf(),
|
|
||||||
var data: List<List<String>> = listOf())
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
package com.synebula.gaea.app.struct.exception
|
|
||||||
|
|
||||||
import com.auth0.jwt.exceptions.TokenExpiredException
|
|
||||||
|
|
||||||
class TokenCloseExpireException(msg: String, var payload: String) : TokenExpiredException(msg)
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
com.synebula.gaea.app.autoconfig.AppAutoConfiguration
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package com.synebula.gaea.data.permission
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 元素授权类型
|
||||||
|
*/
|
||||||
|
enum class AuthorityType {
|
||||||
|
Default,
|
||||||
|
Deny,
|
||||||
|
Allow
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package com.synebula.gaea.data.permission
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色权限类型
|
||||||
|
*/
|
||||||
|
enum class PermissionType {
|
||||||
|
/**
|
||||||
|
* 拥有所有权限
|
||||||
|
*/
|
||||||
|
All,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 拥有最大权限
|
||||||
|
* 不配置无权则有权限
|
||||||
|
*/
|
||||||
|
Maximum,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 最小权限
|
||||||
|
* 不配置有权则无权限
|
||||||
|
*/
|
||||||
|
Minimum,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 没有任何权限
|
||||||
|
*/
|
||||||
|
None
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user