You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

40 lines
1.6 KiB

package echomeet
import (
"yunyan/comm"
"yunyan/pb"
)
/*
按 id 操作会议记录的接口,统一在这里取会话 uid 并做归属校验。
在此之前 getrecord / getrecords / modifyrecords / delrecords / readrecord /
summary / starttask / uprecord 八个接口**全部只按 id 查库**,没有一处比对
record.Uid 与会话 uid(starttask 用了 GetUserId(),但只拿去扣算力和查 VIP)。
后果是任何登录用户改一个 id 就能读别人纪要全文、删改别人的记录、
给别人的记录发起总结(扣自己的算力,但覆盖对方 summary 并触发对方的拾忆抽取)。
写法照 memory 模块(每个接口 requireUID + rec.Uid != uid)。
回调接口 BackCall / AliBackCall 是第三方来的、没有 session,不在此列。
*/
// requireUID 取会话 uid。所有按 id 操作记录的接口第一步。
func requireUID(session comm.IUserSession) (string, *pb.ErrorData) {
uid := session.GetUserId()
if uid == "" {
return "", &pb.ErrorData{Code: pb.ErrorCode_NoLogin, Message: pb.ErrorCode_NoLogin.String()}
}
return uid, nil
}
// recordErr 把 model 层的查询错误转成对外错误。
//
// ⚠️ 「不存在」与「不是你的」回同一个错误码同一句话:分开回等于给出一个
// 探测他人记录 id 的接口。DBError 也正是改动前记录真的不存在时客户端拿到的码,
// 这样合法用户看到的行为没有任何变化。
func recordErr(err error) *pb.ErrorData {
if err == ErrRecordNotFound {
return &pb.ErrorData{Code: pb.ErrorCode_DBError, Message: ErrRecordNotFound.Error()}
}
return &pb.ErrorData{Code: pb.ErrorCode_DBError, Message: err.Error()}
}