权限模块类似于部门的概念,就是相关权限点的集合,总共就三个功能权限点的增加删除修改
SysAclModuleService
public interface SysAclModuleService {
void sava(AclModuleParam param);
void update(AclModuleParam param);
void delete(int aclModuleId);
}
SysAclModuleServiceImpl
@Service
public class SysAclModuleServiceImpl implements SysAclModuleService {
@Resource
private SysAclModuleMapper sysAclModuleMapper;
@Resource
private SysAclMapper sysAclMapper;
@Override
public void sava(AclModuleParam param) {
BeanValidator.check(param);
if(checkExist(param.getParentId(),param.getName(),param.getId())){
throw new BizException("同一层级下存在相同名称的权限模块");
}
SysAclModule aclModule = SysAclModule.builder().name(param.getName()).parentId(param.getParentId()).seq(param.getSeq())
.status(param.getStatus()).remark(param.getRemark()).build();
aclModule.setLevel(LevelUtil.calculateLevel(getLevel(param.getParentId()), param.getParentId()));
aclModule.setOperator(RequestHolder.getCurrentUser().getUsername());
aclModule.setOperateIp(IPUtil.getIpAddress(RequestHolder.getCurrentRequest()));
aclModule.setOperateTime(new Date());
sysAclModuleMapper.insertSelective(aclModule);
}
@Override
public void update(AclModuleParam param) {
BeanValidator.check(param);
if(checkExist(param.getParentId(), param.getName(), param.getId())) {
throw new BizException("同一层级下存在相同名称的权限模块");
}
SysAclModule before = sysAclModuleMapper.selectByPrimaryKey(param.getId());
Preconditions.checkNotNull(before, "待更新的权限模块不存在");
SysAclModule after = SysAclModule.builder().id(param.getId()).name(param.getName()).parentId(param.getParentId()).seq(param.getSeq())
.status(param.getStatus()).remark(param.getRemark()).build();
after.setLevel(LevelUtil.calculateLevel(getLevel(param.getParentId()), param.getParentId()));
after.setOperator(RequestHolder.getCurrentUser().getUsername());
after.setOperateIp(IPUtil.getIpAddress(RequestHolder.getCurrentRequest()));
after.setOperateTime(new Date());
updateWithChild(before, after);
// sysLogService.saveAclModuleLog(before, after);
}
@Transactional
void updateWithChild(SysAclModule before, SysAclModule after){
String newLevelPrefix = after.getLevel();
String oldLevelPrefix = before.getLevel();
if (!after.getLevel().equals(before.getLevel())) {
List<SysAclModule> aclModuleList = sysAclModuleMapper.getChildAclModuleListByLevel(before.getLevel());
if (CollectionUtils.isNotEmpty(aclModuleList)) {
for (SysAclModule aclModule : aclModuleList) {
String level = aclModule.getLevel();
if (level.indexOf(oldLevelPrefix) == 0) {
level = newLevelPrefix + level.substring(oldLevelPrefix.length());
aclModule.setLevel(level);
}
}
sysAclModuleMapper.batchUpdateLevel(aclModuleList);
}
}
sysAclModuleMapper.updateByPrimaryKeySelective(after);
}
private boolean checkExist(Integer parentId, String aclModuleName, Integer deptId) {
return sysAclModuleMapper.countByNameAndParentId(aclModuleName,parentId, deptId) > 0;
}
private String getLevel(Integer aclModuleId) {
SysAclModule aclModule = sysAclModuleMapper.selectByPrimaryKey(aclModuleId);
if (aclModule == null) {
return null;
}
return aclModule.getLevel();
}
@Override
public void delete(int aclModuleId) {
SysAclModule aclModule = sysAclModuleMapper.selectByPrimaryKey(aclModuleId);
Preconditions.checkNotNull(aclModule, "待删除的权限模块不存在,无法删除");
if(sysAclModuleMapper.countByParentId(aclModule.getId()) > 0) {
throw new BizException("当前模块下面有子模块,无法删除");
}
if (sysAclMapper.countByAclModuleId(aclModule.getId()) > 0) {
throw new BizException("当前模块下面有权限点,无法删除");
}
sysAclModuleMapper.deleteByPrimaryKey(aclModuleId);
}
}
权限模块的增加删除修改参照部门模块来进行,特别是层级这一块