Forráskód Böngészése

商户PC端 角色权限发生改变 清空当前角色下所有账号的token

qinxuyang 2 hónapja
szülő
commit
2004cde2ac

+ 35 - 0
alien-store-platform/src/main/java/shop/alien/storeplatform/service/impl/StorePlatformRoleServiceImpl.java

@@ -11,9 +11,12 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
+import shop.alien.config.redis.BaseRedisService;
 import shop.alien.entity.store.StorePlatformRole;
+import shop.alien.entity.store.StoreUser;
 import shop.alien.entity.store.vo.StorePlatformRoleVo;
 import shop.alien.mapper.StorePlatformRoleMapper;
+import shop.alien.mapper.StoreUserMapper;
 import shop.alien.storeplatform.service.StorePlatformRoleMenuService;
 import shop.alien.storeplatform.service.StorePlatformRoleService;
 import shop.alien.storeplatform.service.StorePlatformUserRoleService;
@@ -36,6 +39,8 @@ public class StorePlatformRoleServiceImpl extends ServiceImpl<StorePlatformRoleM
     private final StorePlatformRoleMapper storePlatformRoleMapper;
     private final StorePlatformRoleMenuService storePlatformRoleMenuService;
     private final StorePlatformUserRoleService storePlatformUserRoleService;
+    private final StoreUserMapper storeUserMapper;
+    private final BaseRedisService baseRedisService;
 
     @Override
     public IPage<StorePlatformRole> getRolePage(int page, int size, Integer storeId, String roleName, String description, String status) {
@@ -273,6 +278,36 @@ public class StorePlatformRoleServiceImpl extends ServiceImpl<StorePlatformRoleM
                     return false;
                 }
             }
+            //角色被编辑 清除当前被编辑角色的账号的token
+            try {
+                // 获取该角色下的所有用户ID
+                Integer storeId = role.getStoreId() != null ? role.getStoreId() : originalRole.getStoreId();
+                List<Integer> userIds = storePlatformUserRoleService.getUserIdsByRoleId(role.getRoleId(), storeId);
+                if (userIds != null && !userIds.isEmpty()) {
+                    // 根据用户ID查询用户信息,获取手机号
+                    for (Integer userId : userIds) {
+                        StoreUser storeUser = storeUserMapper.selectById(userId);
+                        if (storeUser != null && storeUser.getPhone() != null) {
+                            // 删除Redis中的token,key格式:storePlatform_手机号
+                            String tokenKey = "store_" + storeUser.getPhone();
+                            String existingToken = baseRedisService.getString(tokenKey);
+                            if (existingToken != null) {
+                                baseRedisService.delete(tokenKey);
+                                log.info("清除角色编辑后的用户token成功,roleId={}, userId={}, phone={}, tokenKey={}", 
+                                        role.getRoleId(), userId, storeUser.getPhone(), tokenKey);
+                            } else {
+                                log.warn("用户token不存在或已过期,roleId={}, userId={}, phone={}, tokenKey={}", 
+                                        role.getRoleId(), userId, storeUser.getPhone(), tokenKey);
+                            }
+                        }
+                    }
+                } else {
+                    log.info("该角色下没有关联用户,无需清除token,roleId={}", role.getRoleId());
+                }
+            } catch (Exception e) {
+                log.error("清除角色编辑后的用户token失败,roleId={}, error={}", role.getRoleId(), e.getMessage(), e);
+                // 不清除token不影响角色更新,只记录错误日志
+            }
             log.info("成功更新角色权限,roleId={}, menuIds={}", role.getRoleId(), menuIds);
         }