0.8.0 引入GAEA 1.0版本

This commit is contained in:
2022-08-19 16:05:22 +08:00
parent 48d761e79c
commit 37713b6d32
53 changed files with 246 additions and 290 deletions

View File

@@ -1,6 +1,6 @@
dependencies {
compile project(":src:zeus.env")
compile "com.synebula:gaea:$gaea_version"
api project(":src:zeus.env")
api "com.synebula:gaea:$gaea_version"
}
publishing {

View File

@@ -1,8 +1,9 @@
package com.synebula.zeus.domain.repository
package com.synebula.zeus.domain.repository.rbac
import com.synebula.gaea.domain.repository.IRepository
import com.synebula.zeus.domain.model.rbac.Authority
import com.synebula.zeus.env.ResourceType
interface IAuthorityRepository : IRepository {
interface IAuthorityRepository : IRepository<Authority, String> {
fun removeByResourceRole(type: ResourceType, resource: List<String>, role: String)
}

View File

@@ -0,0 +1,7 @@
package com.synebula.zeus.domain.repository.rbac
import com.synebula.gaea.domain.repository.IRepository
import com.synebula.zeus.domain.model.rbac.Group
interface IGroupRepository : IRepository<Group, String> {
}

View File

@@ -0,0 +1,7 @@
package com.synebula.zeus.domain.repository.rbac
import com.synebula.gaea.domain.repository.IRepository
import com.synebula.zeus.domain.model.rbac.Role
interface IRoleRepository : IRepository<Role, String> {
}

View File

@@ -0,0 +1,7 @@
package com.synebula.zeus.domain.repository.rbac
import com.synebula.gaea.domain.repository.IRepository
import com.synebula.zeus.domain.model.rbac.User
interface IUserRepository : IRepository<User, String> {
}

View File

@@ -0,0 +1,7 @@
package com.synebula.zeus.domain.repository.rbac.resource
import com.synebula.gaea.domain.repository.IRepository
import com.synebula.zeus.domain.model.rbac.resource.Interface
interface IInterfaceRepository : IRepository<Interface, String> {
}

View File

@@ -0,0 +1,7 @@
package com.synebula.zeus.domain.repository.rbac.resource
import com.synebula.gaea.domain.repository.IRepository
import com.synebula.zeus.domain.model.rbac.resource.Page
interface IPageRepository : IRepository<Page, String> {
}

View File

@@ -0,0 +1,7 @@
package com.synebula.zeus.domain.repository.rbac.resource
import com.synebula.gaea.domain.repository.IRepository
import com.synebula.zeus.domain.model.rbac.resource.System
interface ISystemRepository : IRepository<System, String> {
}

View File

@@ -1,4 +1,4 @@
package com.synebula.zeus.domain.service.contr.component
package com.synebula.zeus.domain.service.component
interface IUserNotifier {
fun added(id: String, name: String, token: String)

View File

@@ -1,7 +1,9 @@
package com.synebula.zeus.domain.service.contr.rbac
import com.synebula.gaea.domain.service.IService
import com.synebula.gaea.domain.service.ServiceDependency
import com.synebula.zeus.domain.model.rbac.Group
import com.synebula.zeus.domain.repository.rbac.IGroupRepository
interface IGroupService : IService<String> {
}
@ServiceDependency(clazz = Group::class, repo = IGroupRepository::class)
interface IGroupService : IService<String>

View File

@@ -1,7 +1,9 @@
package com.synebula.zeus.domain.service.contr.rbac
import com.synebula.gaea.domain.service.IService
import com.synebula.gaea.domain.service.ServiceDependency
import com.synebula.zeus.domain.model.rbac.Role
import com.synebula.zeus.domain.repository.rbac.IRoleRepository
interface IRoleService : IService<String> {
}
@ServiceDependency(clazz = Role::class, repo = IRoleRepository::class)
interface IRoleService : IService<String>

View File

@@ -1,7 +1,9 @@
package com.synebula.zeus.domain.service.contr.rbac.resource
import com.synebula.gaea.domain.service.IService
import com.synebula.gaea.domain.service.ServiceDependency
import com.synebula.zeus.domain.model.rbac.resource.Interface
import com.synebula.zeus.domain.repository.rbac.resource.IInterfaceRepository
interface IInterfaceService : IService<String> {
}
@ServiceDependency(clazz = Interface::class, repo = IInterfaceRepository::class)
interface IInterfaceService : IService<String>

View File

@@ -1,7 +1,9 @@
package com.synebula.zeus.domain.service.contr.rbac.resource
import com.synebula.gaea.domain.service.IService
import com.synebula.gaea.domain.service.ServiceDependency
import com.synebula.zeus.domain.model.rbac.resource.Page
import com.synebula.zeus.domain.repository.rbac.resource.IPageRepository
interface IPageService : IService<String> {
}
@ServiceDependency(clazz = Page::class, repo = IPageRepository::class)
interface IPageService : IService<String>

View File

@@ -1,7 +1,9 @@
package com.synebula.zeus.domain.service.contr.rbac.resource
import com.synebula.gaea.domain.service.IService
import com.synebula.gaea.domain.service.ServiceDependency
import com.synebula.zeus.domain.model.rbac.resource.System
import com.synebula.zeus.domain.repository.rbac.resource.ISystemRepository
interface ISystemService : IService<String> {
}
@ServiceDependency(clazz = System::class, repo = ISystemRepository::class)
interface ISystemService : IService<String>

View File

@@ -1,23 +1,22 @@
package com.synebula.zeus.domain.service.impl.rbac
import com.synebula.gaea.data.IObjectConverter
import com.synebula.gaea.data.serialization.IObjectMapper
import com.synebula.gaea.domain.service.Service
import com.synebula.gaea.log.ILogger
import com.synebula.zeus.domain.model.rbac.Authority
import com.synebula.zeus.domain.repository.IAuthorityRepository
import com.synebula.zeus.domain.repository.rbac.IAuthorityRepository
import com.synebula.zeus.domain.service.cmd.rbac.AuthorityBatchAddCmd
import com.synebula.zeus.domain.service.contr.rbac.IAuthorityService
import com.synebula.zeus.env.ResourceType
class AuthorityService(
private var authorityRepository: IAuthorityRepository,
converter: IObjectConverter, logger: ILogger
) : Service<Authority, String>(Authority::class.java, authorityRepository, converter, logger),
mapper: IObjectMapper
) : Service<Authority, String>(Authority::class.java, authorityRepository, mapper),
IAuthorityService {
override fun add(cmd: AuthorityBatchAddCmd) {
val authorities = cmd.resource.map { Authority(cmd.role, it, cmd.type, cmd.authority) }
this.repository.add(authorities, this.clazz)
this.repository.add(authorities)
}
override fun removeByResourceRole(type: ResourceType, resource: List<String>, role: String) {

View File

@@ -1,13 +0,0 @@
package com.synebula.zeus.domain.service.impl.rbac
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.Group
import com.synebula.zeus.domain.service.contr.rbac.IGroupService
class GroupService(
repository: IRepository,
converter: IObjectConverter, logger: ILogger
) : Service<Group, String>(Group::class.java, repository, converter, logger), IGroupService

View File

@@ -1,13 +0,0 @@
package com.synebula.zeus.domain.service.impl.rbac
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.Role
import com.synebula.zeus.domain.service.contr.rbac.IRoleService
class RoleService(
repository: IRepository,
converter: IObjectConverter, logger: ILogger
) : Service<Role, String>(Role::class.java, repository, converter, logger), IRoleService

View File

@@ -1,55 +1,50 @@
package com.synebula.zeus.domain.service.impl.rbac
import com.synebula.gaea.data.IObjectConverter
import com.synebula.gaea.data.message.DataMessage
import com.synebula.gaea.data.message.Message
import com.synebula.gaea.data.message.Status
import com.synebula.gaea.domain.repository.IRepository
import com.synebula.gaea.data.serialization.IObjectMapper
import com.synebula.gaea.domain.service.ICommand
import com.synebula.gaea.domain.service.Service
import com.synebula.gaea.ext.toMd5
import com.synebula.gaea.log.ILogger
import com.synebula.zeus.domain.model.rbac.User
import com.synebula.zeus.domain.service.contr.component.IUserNotifier
import com.synebula.zeus.domain.service.contr.rbac.IGroupService
import com.synebula.zeus.domain.service.contr.rbac.IRoleService
import com.synebula.zeus.domain.repository.rbac.IUserRepository
import com.synebula.zeus.domain.service.component.IUserNotifier
import com.synebula.zeus.domain.service.contr.rbac.IUserService
import java.util.*
class UserService(
repository: IRepository,
converter: IObjectConverter,
logger: ILogger,
groupService: IGroupService,
roleService: IRoleService,
var userNotifier: IUserNotifier?
) : Service<User, String>(User::class.java, repository, converter, logger), IUserService {
repository: IUserRepository,
mapper: IObjectMapper,
var userNotifier: IUserNotifier?,
var logger: ILogger
) : Service<User, String>(User::class.java, repository, mapper), IUserService {
init {
groupService.addBeforeRemoveListener(this.clazz.name) { id ->
val msg = Message()
if (this.repository.count(mapOf(Pair("group", id)), this.clazz) > 0) {
msg.status = Status.Failure
msg.message = "组下还有用户"
}
msg
}
roleService.addBeforeRemoveListener(this.clazz.name) { id ->
val msg = Message()
if (this.repository.count(mapOf(Pair("role", id)), this.clazz) > 0) {
msg.status = Status.Failure
msg.message = "角色下还有用户"
}
msg
}
}
// init {
// groupService.addBeforeRemoveListener(this.clazz.name) { id ->
// val msg = Message()
// if (this.repository.count(mapOf(Pair("group", id)), this.clazz) > 0) {
// msg.status = Status.Failure
// msg.message = "组下还有用户"
// }
// msg
// }
// roleService.addBeforeRemoveListener(this.clazz.name) { id ->
// val msg = Message()
// if (this.repository.count(mapOf(Pair("role", id)), this.clazz) > 0) {
// msg.status = Status.Failure
// msg.message = "角色下还有用户"
// }
// msg
// }
// }
override fun add(command: ICommand): DataMessage<String> {
val user = this.convert(command)
val user = this.map(command)
user.password = user.password.toMd5()
user.token = UUID.randomUUID().toString()
user.alive = false
this.repository.add(user, this.clazz)
this.repository.add(user)
userNotifier?.added(user.id!!, user.name, user.token!!)
return DataMessage(user.id!!)
}
@@ -60,14 +55,14 @@ class UserService(
* @param key 用户ID
*/
override fun active(key: String, token: String): DataMessage<Any> {
val user = this.repository.get(key, this.clazz)!!
val user = this.repository.get(key)!!
return if (user.alive) {
DataMessage("用户${user.name}无需重复激活")
} else {
if (token == user.token) {
user.alive = true
user.token = null
this.repository.update(user, this.clazz)
this.repository.update(user)
DataMessage(Status.Success, "用户${user.name}激活成功")
} else {
logger.warn(this, "用户${user.name}激活失败, {key: ${key}, token: ${token}")
@@ -77,11 +72,11 @@ class UserService(
}
override fun changePassword(key: String, password: String, newPassword: String): DataMessage<Any> {
val user = this.repository.get(key, this.clazz)!!
val user = this.repository.get(key)!!
return if (user.password == password.toMd5()) {
user.password = newPassword.toMd5()
user.token = null
this.repository.update(user, this.clazz)
this.repository.update(user)
DataMessage()
} else {
logger.warn(this, "用户修改${user.name}密码失败, 旧密码验证不通过")
@@ -91,11 +86,11 @@ class UserService(
override fun resetPassword(key: String, password: String, token: String?): DataMessage<Any> {
val user = this.repository.get(key, this.clazz)!!
val user = this.repository.get(key)!!
return if (token == user.token) {
user.password = password.toMd5()
user.token = null
this.repository.update(user, this.clazz)
this.repository.update(user)
DataMessage()
} else {
logger.warn(this, "用户重置${user.name}密码失败, 系统密码修改令牌:${user.token}, {key: ${key} , token: ${token}")
@@ -104,10 +99,10 @@ class UserService(
}
override fun forgotPassword(key: String): DataMessage<String> {
val user = this.repository.get(key, this.clazz)!!
val user = this.repository.get(key)!!
return if (user.alive) {
user.token = UUID.randomUUID().toString()
this.repository.update(user, this.clazz)
this.repository.update(user)
userNotifier?.forgot(user.id!!, user.name, user.token!!)
DataMessage()
} else

View File

@@ -1,13 +0,0 @@
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.Interface
import com.synebula.zeus.domain.service.contr.rbac.resource.IInterfaceService
class InterfaceService(
repository: IRepository,
converter: IObjectConverter, logger: ILogger
) : Service<Interface, String>(Interface::class.java, repository, converter, logger), IInterfaceService

View File

@@ -1,13 +0,0 @@
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.Page
import com.synebula.zeus.domain.service.contr.rbac.resource.IPageService
class PageService(
repository: IRepository,
converter: IObjectConverter, logger: ILogger
) : Service<Page, String>(Page::class.java, repository, converter, logger), IPageService

View File

@@ -1,13 +0,0 @@
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.System
import com.synebula.zeus.domain.service.contr.rbac.resource.ISystemService
class SystemService(
repository: IRepository,
converter: IObjectConverter, logger: ILogger
) : Service<System, String>(System::class.java, repository, converter, logger), ISystemService