fix: 修复关注/粉丝列表隐私检查假阳性导致本人也无法访问
- follow_repo.go: GetFollowListPublic 改用显式 WHERE uid=? 避免 GORM 主键解析潜在问题 - follow_service.go: GetFollowListPublic 失败时默认公开并记录日志,而非返回错误 - follow_controller.go: 错误兜底时 Accessible 默认 true,避免误锁用户
This commit is contained in:
@ -140,7 +140,7 @@ func (fpc *FollowPageController) FollowersPage(c *gin.Context) {
|
||||
uid, _, _ := common.GetGinUser(c)
|
||||
result, err := fpc.followSvc.ListFollowers(uint(targetUID), uid, page, 20)
|
||||
if err != nil {
|
||||
result = &service.FollowListResult{Items: []model.UserFollow{}, Total: 0}
|
||||
result = &service.FollowListResult{Items: []model.UserFollow{}, Total: 0, Accessible: true}
|
||||
}
|
||||
|
||||
c.HTML(http.StatusOK, "follow/followers.html", common.BuildPageData(c, gin.H{
|
||||
@ -170,7 +170,7 @@ func (fpc *FollowPageController) FollowingPage(c *gin.Context) {
|
||||
uid, _, _ := common.GetGinUser(c)
|
||||
result, err := fpc.followSvc.ListFollowing(uint(targetUID), uid, page, 20)
|
||||
if err != nil {
|
||||
result = &service.FollowListResult{Items: []model.UserFollow{}, Total: 0}
|
||||
result = &service.FollowListResult{Items: []model.UserFollow{}, Total: 0, Accessible: true}
|
||||
}
|
||||
|
||||
c.HTML(http.StatusOK, "follow/following.html", common.BuildPageData(c, gin.H{
|
||||
|
||||
@ -106,7 +106,10 @@ func (r *FollowRepo) IncrFollowingCount(userID uint, delta int) error {
|
||||
|
||||
// GetFollowListPublic 查询用户关注列表公开性
|
||||
func (r *FollowRepo) GetFollowListPublic(userID uint) (bool, error) {
|
||||
var user model.User
|
||||
err := r.db.Select("follow_list_public").First(&user, userID).Error
|
||||
return user.FollowListPublic, err
|
||||
var listPublic bool
|
||||
err := r.db.Model(&model.User{}).
|
||||
Select("follow_list_public").
|
||||
Where("uid = ?", userID).
|
||||
Scan(&listPublic).Error
|
||||
return listPublic, err
|
||||
}
|
||||
|
||||
@ -2,6 +2,7 @@ package service
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
"metazone.cc/metalab/internal/common"
|
||||
"metazone.cc/metalab/internal/model"
|
||||
@ -132,7 +133,8 @@ func (s *FollowService) GetStatus(currentUserID, targetUserID uint) (*FollowStat
|
||||
func (s *FollowService) ListFollowers(userID, currentUserID uint, page, pageSize int) (*FollowListResult, error) {
|
||||
listPublic, err := s.repo.GetFollowListPublic(userID)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("查询公开设置: %w", err)
|
||||
log.Printf("[FollowService] ListFollowers GetFollowListPublic error uid=%d: %v, fallback to public", userID, err)
|
||||
listPublic = true
|
||||
}
|
||||
|
||||
p := common.Pagination{Page: page, PageSize: pageSize}
|
||||
@ -174,7 +176,8 @@ func (s *FollowService) ListFollowers(userID, currentUserID uint, page, pageSize
|
||||
func (s *FollowService) ListFollowing(userID, currentUserID uint, page, pageSize int) (*FollowListResult, error) {
|
||||
listPublic, err := s.repo.GetFollowListPublic(userID)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("查询公开设置: %w", err)
|
||||
log.Printf("[FollowService] ListFollowing GetFollowListPublic error uid=%d: %v, fallback to public", userID, err)
|
||||
listPublic = true
|
||||
}
|
||||
|
||||
p := common.Pagination{Page: page, PageSize: pageSize}
|
||||
|
||||
Reference in New Issue
Block a user