This commit is contained in:
hero920103 committed 2026-10-19 01:13:17 +08:00
1 parent 5718a00e31
commit 1850ac640e
226 files changed
+37772 -12071

No files matched your search

+15 -25
View File
@@ -8,6 +8,7 @@ import (
"time"
"server/models"
"server/pkg/identity"
"server/pkg/jwtutil"
"github.com/beego/beego/v2/client/orm"
@@ -21,36 +22,20 @@ type BackendErpContactController struct {
// contactClaims 从请求头解析登录态 JWT,返回后端用户 Claims
func (c *BackendErpContactController) contactClaims() (*jwtutil.Claims, error) {
auth := c.Ctx.Request.Header.Get("Authorization")
if auth == "" {
return nil, fmt.Errorf("未登录")
}
parts := strings.SplitN(auth, " ", 2)
if len(parts) != 2 || !strings.EqualFold(parts[0], "Bearer") {
return nil, fmt.Errorf("认证信息格式错误")
}
claims, err := jwtutil.ParseToken(parts[1])
if err != nil {
return nil, fmt.Errorf("无效的token")
}
if claims.UserType != "backend" {
return nil, fmt.Errorf("无权访问")
}
return claims, nil
return identity.Claims(c.Ctx.Request.Header.Get("Authorization"), identity.EndBackend)
}
// contactTenantID 获取当前请求的租户ID:优先使用登录态 JWT 中的租户,
// 仅当显式传入 tid 参数时才以参数为准(兼容管理端等显式指定场景)。
// contactTenantID 获取当前请求的租户 ID:一律以登录态 JWT 为准。
// ?tid= 参数不再参与,否则 backend 账号改参数即可读写其他企业的通讯录。
func (c *BackendErpContactController) contactTenantID() (uint64, error) {
claims, err := c.contactClaims()
if err != nil {
return 0, err
}
tid := uint64(claims.TenantId)
if v, e := c.GetInt64("tid"); e == nil && v > 0 {
tid = uint64(v)
if claims.TenantId <= 0 {
return 0, fmt.Errorf("登录态未绑定企业")
}
return tid, nil
return uint64(claims.TenantId), nil
}
type erpContactDTO struct {
@@ -413,10 +398,15 @@ func (c *BackendErpContactController) Star() {
c.contactJsonOK(nil)
}
// SyncAllContacts 全量同步:将所有员工同步到通讯录
// SyncAllContacts 全量同步:将当前租户的员工同步到通讯录
// POST /backend/erp/contact/syncAll
func (c *BackendErpContactController) SyncAllContacts() {
tid, _ := c.GetInt64("tid")
// 此处必须走登录态:早期直接取 ?tid=,不带 token 也能调,会把所有企业的员工一起同步
tid, err := c.contactTenantID()
if err != nil {
c.contactJsonError(401, err.Error())
return
}
qs := models.Orm.QueryTable(new(models.BackendEmployee)).
Filter("delete_time__isnull", true).
@@ -426,7 +416,7 @@ func (c *BackendErpContactController) SyncAllContacts() {
}
var employees []models.BackendEmployee
_, err := qs.All(&employees)
_, err = qs.All(&employees)
if err != nil {
c.contactJsonError(500, "查询员工失败: "+err.Error())
return