package com.app.mvc.acl.service;
import com.app.mvc.acl.convert.BaseConvert;
import com.app.mvc.acl.dao.SysAclDao;
import com.app.mvc.acl.dao.SysRoleAclDao;
import com.app.mvc.acl.domain.SysAcl;
import com.app.mvc.acl.domain.SysBase;
import com.app.mvc.acl.domain.SysRoleAcl;
import com.google.common.collect.Lists;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
/**
* Created by jimin on 16/1/23.
*/
@Service
public class SysRoleAclService implements SysService {
@Resource
private SysRoleAclDao sysRoleAclDao;
@Resource
private SysAclDao sysAclDao;
@Resource
private SysLogService sysLogService;
/**
* 更新角色-权限点关系
*/
public void changeRoleAcls(int roleId, List<Integer> aclIdList) {
List<Integer> originAclIdList = sysRoleAclDao.getAclIdListByRoleId(roleId);
updateRoleAcls(roleId, aclIdList);
sysLogService.saveRoleAclLog(roleId, originAclIdList, aclIdList);
}
@Transactional
private void updateRoleAcls(int roleId, List<Integer> aclIdList) {
// 删除旧的
sysRoleAclDao.deleteByRoleId(roleId);
// 组装新的
if (CollectionUtils.isEmpty(aclIdList)) {
return;
}
SysBase base = BaseConvert.of();
List<SysRoleAcl> roleAclList = Lists.newArrayList();
for (Integer aclId : aclIdList) {
roleAclList.add(SysRoleAcl.builder().roleId(roleId).aclId(aclId).operator(base.getOperator()).operateIp(base.getOperateIp()).build());
}
// 添加新的
sysRoleAclDao.batchInsert(roleAclList);
}
public List<SysAcl> getListByRoleId(int roleId) {
List<Integer> aclIdList = sysRoleAclDao.getAclIdListByRoleId(roleId);
if (CollectionUtils.isEmpty(aclIdList)) {
return Lists.newArrayList();
}
return sysAclDao.getByIdList(aclIdList);
}
@Override
public void recover(int targetId, Object o) {
List<Integer> aclIdList = (List<Integer>) o;
changeRoleAcls(targetId, aclIdList);
}
}