jiangping
2024-12-27 5506edbe54883b31db3cc8e4a1d9d0795a18a3c9
server/service/src/main/java/com/doumee/config/shiro/ShiroRealm.java
@@ -4,6 +4,8 @@
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.CompanyPermissionMapper;
import com.doumee.dao.business.join.CompanyPermissionJoinMapper;
import com.doumee.dao.business.model.Company;
import com.doumee.dao.business.model.CompanyPermission;
import com.doumee.dao.system.model.SystemDataPermission;
@@ -16,6 +18,7 @@
import com.doumee.service.system.SystemPermissionService;
import com.doumee.service.system.SystemRoleService;
import com.doumee.service.system.SystemUserService;
import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
@@ -31,6 +34,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
 * 自定义Realm,处理认证和权限
@@ -60,6 +64,7 @@
    @Lazy
    @Autowired
    private SystemPermissionService systemPermissionService;
    /**
     * 权限处理
@@ -109,26 +114,60 @@
        // 获取登录用户信息
         if(authenticationToken.getUserType() == 0){
            roles =   systemRoleService.findByUserId(user.getId());
            CompanyPermission c = new CompanyPermission();
            c.setUserId(user.getId());
            c.setIsdeleted(Constants.ZERO);
            List<CompanyPermission> pList = companyPermissionService.findList(c);
            if(pList!=null){
                for (CompanyPermission cc : pList){
                    if(user.getCompanyIdList() == null){
                        user.setCompanyIdList(new ArrayList<>());
                    }
                    user.getCompanyIdList().add(cc.getCompanyId());
                }
            }
            permissions =  systemPermissionService.findByUserId(user.getId());
             CompanyPermission c = new CompanyPermission();
             c.setUserId(user.getId());
             c.setIsdeleted(Constants.ZERO);
             List<CompanyPermission> pList = companyPermissionService.findList(c);
             if(pList!=null){
                 for (CompanyPermission cc : pList){
                     if(user.getCompanyIdList() == null){
                         user.setCompanyIdList(new ArrayList<>());
                     }
                     user.getCompanyIdList().add(cc.getCompanyId());
                 }
             }
             permissions =  systemPermissionService.findByUserId(user.getId());
        }else{
            Company company = companyService.findById(user.getCompanyId());
            Integer selfCompanyId = user.getCompanyId();
            Company company = companyService.findById(selfCompanyId);
            if(company == null){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,企业账号信息不正确!");
            }
            user.setCompany(company);
            if(StringUtils.equals(company.getUsername(),user.getUsername())){
            user.setShowCompany(company);
             if(authenticationToken.getUserType() == 1){
                 List<CompanyPermission> pList  = companyPermissionService.getUserCompanyPermission(user.getId());
                 //加入自己的默认企业
                 CompanyPermission companyPermission = new CompanyPermission();
                 companyPermission.setUserId(user.getId());
                 companyPermission.setCompanyId(company.getId());
                 companyPermission.setType(Constants.ONE);
                 companyPermission.setId(Constants.ONE);
                 companyPermission.setIsSelfCompany(Constants.ONE);
                 companyPermission.setIsShow(Constants.ONE);
                 companyPermission.setCompanyName(company.getName());
                 pList.add(companyPermission);
                 if(Objects.nonNull(authenticationToken.getCompanyId())){
                     for (CompanyPermission c:pList) {
                         if(Constants.equalsInteger(c.getCompanyId(),authenticationToken.getCompanyId())){
                             c.setIsShow(Constants.ONE);
                             Company showCompany = companyService.findById(authenticationToken.getCompanyId());
                             user.setShowCompany(showCompany);
                         }else{
                             c.setIsShow(Constants.ZERO);
                         }
                     }
                 }
                 if(CollectionUtils.isNotEmpty(pList)) {
                     user.setCompanyPermissionList(pList);
                 }
             }
             //如果用户与企业超管账号相同 或者 企业主键与当前切换后的主键不相同时 给超管权限
            if(StringUtils.equals(company.getUsername(),user.getUsername())
                    ||( Objects.nonNull(authenticationToken.getCompanyId()) && !Constants.equalsInteger(company.getId(),authenticationToken.getCompanyId())  )){
                if(Objects.nonNull(authenticationToken.getCompanyId())){
                    user.setCompanyId(authenticationToken.getCompanyId());
                }
                //如果是超管,
                SystemRole role = new SystemRole();
                role.setType(Constants.ONE);
@@ -145,7 +184,11 @@
        SystemRole rt = new SystemRole();
        rt.setDeleted(Boolean.FALSE);
        //数据部门权限集合
        user.setDepartIdList(systemDataPermissionService.selectHighRole(new SystemDataPermission(),rt,user));
        if(Constants.equalsInteger(user.getType(),Constants.ONE) && Constants.equalsInteger(user.getCompany().getId(),user.getCompanyId())){
            user.setDepartIdList(null);
        }else{
            user.setDepartIdList(systemDataPermissionService.selectHighRole(new SystemDataPermission(),rt,user));
        }
        LoginUserInfo userInfo = LoginUserInfo.from(user, roles, permissions);
        // 验证用户