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.mapper.permission.RoleMapper
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.IRoleService
import top.fatweb.api.util.PageUtil
@@ -27,7 +29,9 @@ import top.fatweb.api.vo.permission.RoleWithPowerVo
*/
@Service
class RoleServiceImpl(
private val powerRoleService: IPowerRoleService
private val powerRoleService: IPowerRoleService,
private val elementService: IElementService,
private val menuService: IMenuService
) : ServiceImpl<RoleMapper, Role>(), IRoleService {
override fun getPage(roleGetParam: RoleGetParam?): PageVo<RoleWithPowerVo> {
val roleIdsPage = Page<Long>(roleGetParam?.currentPage ?: 1, roleGetParam?.pageSize ?: 20)
@@ -53,16 +57,11 @@ class RoleServiceImpl(
@Transactional
override fun add(roleAddParam: RoleAddParam): RoleVo? {
val fullPowerIds: HashSet<Long> = hashSetOf()
roleAddParam.powerIds?.forEach {
fullPowerIds.add(it)
fullPowerIds.add(it / 100 * 100)
fullPowerIds.add(it / 10000 * 10000)
fullPowerIds.add(it / 1000000 * 1000000)
}
val fullPowerIds = roleAddParam.powerIds?.let { getFullPowerIds(it) }
val role = RoleConverter.roleAddParamToRole(roleAddParam)
if (baseMapper.insert(role) == 1) {
if (fullPowerIds.isEmpty()) {
if (fullPowerIds.isNullOrEmpty()) {
return RoleConverter.roleToRoleVo(role)
}
@@ -81,18 +80,13 @@ class RoleServiceImpl(
@Transactional
override fun update(roleUpdateParam: RoleUpdateParam): RoleVo? {
val fullPowerIds: HashSet<Long> = hashSetOf()
roleUpdateParam.powerIds?.forEach {
fullPowerIds.add(it)
fullPowerIds.add(it / 100 * 100)
fullPowerIds.add(it / 10000 * 10000)
fullPowerIds.add(it / 1000000 * 1000000)
}
val fullPowerIds = roleUpdateParam.powerIds?.let { getFullPowerIds(it) }
val role = RoleConverter.roleUpdateParamToRole(roleUpdateParam)
val oldPowerList = baseMapper.getPowerList(roleUpdateParam.id)
val addPowerIds = HashSet<Long>()
val removePowerIds = HashSet<Long>()
fullPowerIds.forEach { addPowerIds.add(it) }
fullPowerIds?.forEach { addPowerIds.add(it) }
oldPowerList.forEach {
if (it != null) {
removePowerIds.add(it)
@@ -135,4 +129,30 @@ class RoleServiceImpl(
baseMapper.deleteBatchIds(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)
values (1010100, '查询', 1010000, null),
(1010200, '增加', 1010000, 1010100),
(1010300, '修改', 1010000, 1010100),
(1010200, '增加', 1010000, null),
(1010300, '修改', 1010000, null),
(1020100, '查询', 1020000, null),
(1020200, '增加', 1020000, 1020100),
(1020300, '修改', 1020000, 1020100),
(1020400, '删除', 1020000, 1020100),
(1020200, '增加', 1020000, null),
(1020300, '修改', 1020000, null),
(1020400, '删除', 1020000, null),
(1030100, '查询', 1030000, null),
(1030200, '增加', 1030000, 1030100),
(1030300, '修改', 1030000, 1030100),
(1030400, '删除', 1030000, 1030100) as new_value
(1030200, '增加', 1030000, null),
(1030300, '修改', 1030000, null),
(1030400, '删除', 1030000, null) as new_value
on duplicate key update name = new_value.name,
menu_id = new_value.menu_id,
parent_id = new_value.parent_id;