Optimize permission structure
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user