package commonservice import "gorm.io/gorm" // TeamRole 查询用户在团队中的角色;非成员返回空串。 func TeamRole(db *gorm.DB, teamID, userID int64) (string, error) { if teamID <= 0 || userID <= 0 { return "", nil } var role string err := db.Table("team_members").Select("role"). Where("team_id = ? AND user_id = ?", teamID, userID). Scan(&role).Error if err != nil { return "", err } return role, nil } // TeamRoleRank 角色权重:owner=3 admin=2 member=1。 func TeamRoleRank(role string) int { switch role { case "owner": return 3 case "admin": return 2 case "member": return 1 } return 0 } // IsTeamAdmin 该用户是否为团队 owner/admin。 func IsTeamAdmin(db *gorm.DB, teamID, userID int64) bool { if teamID <= 0 || userID <= 0 { return false } var n int64 db.Table("team_members"). Where("team_id = ? AND user_id = ? AND role IN ('owner','admin')", teamID, userID). Count(&n) return n > 0 } // RequireTeamRole 校验最低角色,返回实际角色。 func RequireTeamRole(db *gorm.DB, teamID, userID int64, min string) (string, error) { role, err := TeamRole(db, teamID, userID) if err != nil { return "", err } if TeamRoleRank(role) < TeamRoleRank(min) { return role, Forbidden("TEAM_FORBIDDEN") } return role, nil }