更新
This commit is contained in:
1 parent
5718a00e31
commit
1850ac640e
226 files changed
+37772
-12071
No files matched your search
@@ -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
|
||||
|
||||
Reference in new issue
Block a user