Files
im_manager/server/internal/logic/sys/im_policy_support.go
T

61 lines
1.7 KiB
Go

package sys
import (
"context"
"fmt"
"strconv"
"hotgo/internal/dao"
"hotgo/internal/library/contexts"
"hotgo/internal/library/imkafka"
"hotgo/internal/library/imtenant"
"hotgo/internal/model/entity"
"hotgo/internal/service"
"github.com/gogf/gf/v2/encoding/gjson"
"github.com/gogf/gf/v2/errors/gerror"
)
func resolveImPolicyTenant(ctx context.Context, selectedTenantID int64) (tenantID int64, tenantCode string, err error) {
operatorID := contexts.GetUserId(ctx)
if service.AdminMember().VerifySuperId(ctx, operatorID) && selectedTenantID == 0 {
return 0, "*", nil
}
scope, err := resolveImAdminScope(ctx, selectedTenantID)
if err != nil {
return 0, "", err
}
var tenant *entity.ImTenant
if err = imtenant.RegistryDB().Model(dao.ImTenant.Table()).Safe().Ctx(ctx).
Where(dao.ImTenant.Columns().Id, scope.TenantId).Scan(&tenant); err != nil {
return 0, "", gerror.Wrap(err, "获取IM租户失败")
}
if tenant == nil {
return 0, "", gerror.New("IM租户不存在")
}
return tenant.Id, tenant.Code, nil
}
func policyJSON(value *gjson.Json, fallback string) string {
if value == nil || value.String() == "" || value.String() == "null" {
return fallback
}
return value.String()
}
func publishImPolicyEvent(ctx context.Context, tenantID int64, tenantCode, eventType, group string, version uint) error {
return imkafka.PublishConfigEvent(ctx, imkafka.ConfigEventInput{
TenantID: tenantID,
TenantCode: tenantCode,
EventType: eventType,
Group: group,
Keys: []string{"version", "payload"},
BizID: fmt.Sprintf("%s:%d:%d", group, tenantID, version),
Actor: &imkafka.Actor{
Type: "admin",
ID: strconv.FormatInt(contexts.GetUserId(ctx), 10),
},
CreatedBy: contexts.GetUserId(ctx),
})
}