diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/rc/impl/PublicJobFairServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/rc/impl/PublicJobFairServiceImpl.java index 7f64faf..78af29e 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/rc/impl/PublicJobFairServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/rc/impl/PublicJobFairServiceImpl.java @@ -12,8 +12,10 @@ import com.ruoyi.cms.service.IJobService; import com.ruoyi.cms.service.rc.IPublicJobFairService; import com.ruoyi.cms.util.RoleUtils; import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.AppUser; import com.ruoyi.common.core.domain.entity.Company; import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.model.LoginSiteUser; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.SecurityUtils; @@ -129,7 +131,7 @@ public class PublicJobFairServiceImpl implements IPublicJobFairService { return Collections.emptyList(); } - boolean enterpriseRole = RoleUtils.isCompanyAdmin(); + boolean enterpriseRole = RoleUtils.isCompanyAdminSafe(); boolean cmsAdmin = SecurityUtils.isLogin() && !enterpriseRole; Company currentCompany = enterpriseRole ? getCurrentCompanyOrNull() : null; if (enterpriseRole && currentCompany == null) { @@ -286,7 +288,7 @@ public class PublicJobFairServiceImpl implements IPublicJobFairService { @Override @Transactional(rollbackFor = Exception.class) public AjaxResult signupCurrentCompany(String jobFairId) { - if (!RoleUtils.isCompanyAdmin()) { + if (!RoleUtils.isCompanyAdminSafe()) { return AjaxResult.error("仅企业用户可以报名招聘会"); } if (StringUtils.isBlank(jobFairId)) { @@ -545,7 +547,7 @@ public class PublicJobFairServiceImpl implements IPublicJobFairService { * 为企业端列表补充报名状态和按钮状态。 */ private void fillCompanyApplyState(List list) { - if (list == null || list.isEmpty() || !RoleUtils.isCompanyAdmin()) { + if (list == null || list.isEmpty() || !RoleUtils.isCompanyAdminSafe()) { return; } Company company = getCurrentCompanyOrNull(); @@ -588,13 +590,13 @@ public class PublicJobFairServiceImpl implements IPublicJobFairService { } private void ensureCompanyOperation() { - if (!RoleUtils.isCompanyAdmin()) { + if (!RoleUtils.isCompanyAdminSafe()) { throw new ServiceException("仅企业用户可以维护报名岗位"); } } private void ensureAdminOperation() { - if (RoleUtils.isCompanyAdmin()) { + if (RoleUtils.isCompanyAdminSafe()) { throw new ServiceException("企业用户不能执行管理员操作"); } } @@ -647,21 +649,43 @@ public class PublicJobFairServiceImpl implements IPublicJobFairService { * 两种方式都保留,和户外招聘会的企业识别规则一致。 */ private Company getCurrentCompanyOrNull() { - if (!RoleUtils.isCompanyAdmin() || !SecurityUtils.isLogin()) { + if (!RoleUtils.isCompanyAdminSafe()) { return null; } - LoginUser loginUser = SecurityUtils.getLoginUser(); - if (loginUser == null || loginUser.getUser() == null) { + String idCard = null; + Long userId = null; + String nickName = null; + String userName = null; + + //后台登录用户 + LoginUser loginUser = SecurityUtils.getLoginUserSafe(); + if (loginUser != null && loginUser.getUser() != null) { + SysUser sysUser = loginUser.getUser(); + userId = loginUser.getUserId() == null ? sysUser.getUserId() : loginUser.getUserId(); + idCard = sysUser.getIdCard(); + nickName = sysUser.getNickName(); + userName = sysUser.getUserName(); + } + // 移动端登录用户 + else if (SiteSecurityUtils.isLogin()) { + LoginSiteUser loginSiteUser = SiteSecurityUtils.getLoginUser(); + if (loginSiteUser != null && loginSiteUser.getUser() != null) { + AppUser siteUser = loginSiteUser.getUser(); + userId = loginSiteUser.getUserId() == null ? siteUser.getUserId() : loginSiteUser.getUserId(); + idCard = siteUser.getIdCard(); + nickName = siteUser.getName(); + userName = siteUser.getName(); + } + } else { return null; } - SysUser sysUser = loginUser.getUser(); - if (StringUtils.isNotBlank(sysUser.getIdCard())) { - Company company = companyService.queryCodeCompany(sysUser.getIdCard()); + + if (StringUtils.isNotBlank(idCard)) { + Company company = companyService.queryCodeCompany(idCard); if (company != null) { return company; } } - Long userId = loginUser.getUserId() == null ? sysUser.getUserId() : loginUser.getUserId(); if (userId != null) { Company company = companyMapper.selectOne(new LambdaQueryWrapper() .eq(Company::getUserId, userId) @@ -673,11 +697,11 @@ public class PublicJobFairServiceImpl implements IPublicJobFairService { } } List names = new ArrayList<>(); - if (StringUtils.isNotBlank(sysUser.getNickName())) { - names.add(sysUser.getNickName()); + if (StringUtils.isNotBlank(nickName)) { + names.add(nickName); } - if (StringUtils.isNotBlank(sysUser.getUserName()) && !names.contains(sysUser.getUserName())) { - names.add(sysUser.getUserName()); + if (StringUtils.isNotBlank(userName) && !names.contains(userName)) { + names.add(userName); } if (!names.isEmpty()) { List companies = companyMapper.selectList(new LambdaQueryWrapper() diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/RoleUtils.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/RoleUtils.java index c3035bf..461917c 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/RoleUtils.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/RoleUtils.java @@ -1,7 +1,6 @@ package com.ruoyi.cms.util; import com.ruoyi.common.core.domain.entity.AppUser; -import com.ruoyi.common.core.domain.entity.Company; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginSiteUser; import com.ruoyi.common.core.domain.model.LoginUser; @@ -31,6 +30,24 @@ public class RoleUtils { .anyMatch(role -> StringUtil.COMPANY_ADMIN_ROLE_KEY.equals(role.getRoleId())); } + /** + * 安全获取是否企业账号 + * @return + */ + public static boolean isCompanyAdminSafe() { + LoginUser loginUser = SecurityUtils.getLoginUserSafe(); + if (loginUser != null && loginUser.getUser() != null && loginUser.getUser().getRoles() != null) { + return loginUser.getUser().getRoles().stream() + .anyMatch(role -> StringUtil.COMPANY_ADMIN_ROLE_KEY.equals(role.getRoleId())); + } + if (SiteSecurityUtils.isLogin()) { + LoginSiteUser loginSiteUser = SiteSecurityUtils.getLoginUser(); + return loginSiteUser != null && loginSiteUser.getUser() != null + && StringUtil.IS_COMPANY_USER.equals(loginSiteUser.getUser().getIsCompanyUser()); + } + return false; + } + /** * 获取身份证或统一信用代码 * @return diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java index e0843ff..0a37af7 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java @@ -95,6 +95,21 @@ public class SecurityUtils } } + /** + * 安全获取后台登录用户,不会抛异常;类型不匹配/未登录返回null + */ + public static LoginUser getLoginUserSafe() { + Authentication authentication = getAuthentication(); + if (authentication == null) { + return null; + } + Object principal = authentication.getPrincipal(); + if (principal instanceof LoginUser) { + return (LoginUser) principal; + } + return null; + } + /** * 获取Authentication */