Optimize permission structure

This commit is contained in:
2023-11-15 14:53:49 +08:00
parent d334a231df
commit 419a883020
2 changed files with 45 additions and 25 deletions

View File

@@ -10,6 +10,8 @@ import top.fatweb.api.entity.permission.PowerRole
import top.fatweb.api.entity.permission.Role import top.fatweb.api.entity.permission.Role
import top.fatweb.api.mapper.permission.RoleMapper import top.fatweb.api.mapper.permission.RoleMapper
import top.fatweb.api.param.authentication.* import top.fatweb.api.param.authentication.*
import top.fatweb.api.service.permission.IElementService
import top.fatweb.api.service.permission.IMenuService
import top.fatweb.api.service.permission.IPowerRoleService import top.fatweb.api.service.permission.IPowerRoleService
import top.fatweb.api.service.permission.IRoleService import top.fatweb.api.service.permission.IRoleService
import top.fatweb.api.util.PageUtil import top.fatweb.api.util.PageUtil
@@ -27,7 +29,9 @@ import top.fatweb.api.vo.permission.RoleWithPowerVo
*/ */
@Service @Service
class RoleServiceImpl( class RoleServiceImpl(
private val powerRoleService: IPowerRoleService private val powerRoleService: IPowerRoleService,
private val elementService: IElementService,
private val menuService: IMenuService
) : ServiceImpl<RoleMapper, Role>(), IRoleService { ) : ServiceImpl<RoleMapper, Role>(), IRoleService {
override fun getPage(roleGetParam: RoleGetParam?): PageVo<RoleWithPowerVo> { override fun getPage(roleGetParam: RoleGetParam?): PageVo<RoleWithPowerVo> {
val roleIdsPage = Page<Long>(roleGetParam?.currentPage ?: 1, roleGetParam?.pageSize ?: 20) val roleIdsPage = Page<Long>(roleGetParam?.currentPage ?: 1, roleGetParam?.pageSize ?: 20)
@@ -53,16 +57,11 @@ class RoleServiceImpl(
@Transactional @Transactional
override fun add(roleAddParam: RoleAddParam): RoleVo? { override fun add(roleAddParam: RoleAddParam): RoleVo? {
val fullPowerIds: HashSet<Long> = hashSetOf() val fullPowerIds = roleAddParam.powerIds?.let { getFullPowerIds(it) }
roleAddParam.powerIds?.forEach {
fullPowerIds.add(it)
fullPowerIds.add(it / 100 * 100)
fullPowerIds.add(it / 10000 * 10000)
fullPowerIds.add(it / 1000000 * 1000000)
}
val role = RoleConverter.roleAddParamToRole(roleAddParam) val role = RoleConverter.roleAddParamToRole(roleAddParam)
if (baseMapper.insert(role) == 1) { if (baseMapper.insert(role) == 1) {
if (fullPowerIds.isEmpty()) { if (fullPowerIds.isNullOrEmpty()) {
return RoleConverter.roleToRoleVo(role) return RoleConverter.roleToRoleVo(role)
} }
@@ -81,18 +80,13 @@ class RoleServiceImpl(
@Transactional @Transactional
override fun update(roleUpdateParam: RoleUpdateParam): RoleVo? { override fun update(roleUpdateParam: RoleUpdateParam): RoleVo? {
val fullPowerIds: HashSet<Long> = hashSetOf() val fullPowerIds = roleUpdateParam.powerIds?.let { getFullPowerIds(it) }
roleUpdateParam.powerIds?.forEach {
fullPowerIds.add(it)
fullPowerIds.add(it / 100 * 100)
fullPowerIds.add(it / 10000 * 10000)
fullPowerIds.add(it / 1000000 * 1000000)
}
val role = RoleConverter.roleUpdateParamToRole(roleUpdateParam) val role = RoleConverter.roleUpdateParamToRole(roleUpdateParam)
val oldPowerList = baseMapper.getPowerList(roleUpdateParam.id) val oldPowerList = baseMapper.getPowerList(roleUpdateParam.id)
val addPowerIds = HashSet<Long>() val addPowerIds = HashSet<Long>()
val removePowerIds = HashSet<Long>() val removePowerIds = HashSet<Long>()
fullPowerIds.forEach { addPowerIds.add(it) } fullPowerIds?.forEach { addPowerIds.add(it) }
oldPowerList.forEach { oldPowerList.forEach {
if (it != null) { if (it != null) {
removePowerIds.add(it) removePowerIds.add(it)
@@ -135,4 +129,30 @@ class RoleServiceImpl(
baseMapper.deleteBatchIds(roleDeleteParam.ids) baseMapper.deleteBatchIds(roleDeleteParam.ids)
powerRoleService.remove(KtQueryWrapper(PowerRole()).`in`(PowerRole::roleId, roleDeleteParam.ids)) powerRoleService.remove(KtQueryWrapper(PowerRole()).`in`(PowerRole::roleId, roleDeleteParam.ids))
} }
private fun getFullPowerIds(powerIds: List<Long>): Set<Long> {
val fullPowerIds: HashSet<Long> = hashSetOf()
powerIds.forEach {
fullPowerIds.add(it)
getElementParent(it / 100 * 100, fullPowerIds)
getMenuParent(it / 10000 * 10000, fullPowerIds)
fullPowerIds.add(it / 1000000 * 1000000)
}
return fullPowerIds
}
private fun getElementParent(id: Long, parentIds: HashSet<Long>) {
parentIds.add(id)
elementService.getById(id)?.parentId?.let {
getElementParent(it, parentIds)
}
}
private fun getMenuParent(id: Long, parentIds: HashSet<Long>) {
parentIds.add(id)
menuService.getById(id)?.parentId?.let {
getMenuParent(it, parentIds)
}
}
} }

View File

@@ -52,16 +52,16 @@ on duplicate key update name =new_value.name,
insert into t_element(id, name, menu_id, parent_id) insert into t_element(id, name, menu_id, parent_id)
values (1010100, '查询', 1010000, null), values (1010100, '查询', 1010000, null),
(1010200, '增加', 1010000, 1010100), (1010200, '增加', 1010000, null),
(1010300, '修改', 1010000, 1010100), (1010300, '修改', 1010000, null),
(1020100, '查询', 1020000, null), (1020100, '查询', 1020000, null),
(1020200, '增加', 1020000, 1020100), (1020200, '增加', 1020000, null),
(1020300, '修改', 1020000, 1020100), (1020300, '修改', 1020000, null),
(1020400, '删除', 1020000, 1020100), (1020400, '删除', 1020000, null),
(1030100, '查询', 1030000, null), (1030100, '查询', 1030000, null),
(1030200, '增加', 1030000, 1030100), (1030200, '增加', 1030000, null),
(1030300, '修改', 1030000, 1030100), (1030300, '修改', 1030000, null),
(1030400, '删除', 1030000, 1030100) as new_value (1030400, '删除', 1030000, null) as new_value
on duplicate key update name = new_value.name, on duplicate key update name = new_value.name,
menu_id = new_value.menu_id, menu_id = new_value.menu_id,
parent_id = new_value.parent_id; parent_id = new_value.parent_id;