sync: 同步 v1.0.4 并脱敏配置与镜像
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
package iot
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"git.5iot.com/iotlcm-public/iotlcm-admin-svr/internal/dao"
|
||||
"git.5iot.com/iotlcm-public/iotlcm-admin-svr/internal/library/contexts"
|
||||
"git.5iot.com/iotlcm-public/iotlcm-admin-svr/internal/model"
|
||||
"git.5iot.com/iotlcm-public/iotlcm-admin-svr/internal/model/entity"
|
||||
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
)
|
||||
|
||||
type channelDisplayScope struct {
|
||||
TenantID string
|
||||
DeptID int64
|
||||
FullName bool
|
||||
}
|
||||
|
||||
// Channel names are private to the tenant's top organization. A broad data
|
||||
// scope or an administrator role does not grant downstream organizations names.
|
||||
func canViewChannelFullName(ctx context.Context) bool {
|
||||
return resolveChannelDisplayScope(ctx, func() (*entity.SysDept, error) {
|
||||
var dept *entity.SysDept
|
||||
cols := dao.SysDept.Columns()
|
||||
err := dao.SysDept.Ctx(ctx).Fields(cols.DeptId, cols.ParentId, cols.Ancestors).
|
||||
Where(cols.TenantId, contexts.GetTenantId(ctx)).
|
||||
Where(cols.DeptId, contexts.GetDeptId(ctx)).Scan(&dept)
|
||||
return dept, err
|
||||
})
|
||||
}
|
||||
|
||||
func resolveChannelDisplayScope(ctx context.Context, load func() (*entity.SysDept, error)) bool {
|
||||
user := contexts.GetUser(ctx)
|
||||
if user == nil || user.DeptId <= 0 || strings.TrimSpace(user.TenantId) == "" {
|
||||
return false
|
||||
}
|
||||
const key = "iot.channelDisplayScope"
|
||||
if cached, ok := contexts.GetDataValue(ctx, key).(channelDisplayScope); ok && cached.TenantID == user.TenantId && cached.DeptID == user.DeptId {
|
||||
return cached.FullName
|
||||
}
|
||||
dept, err := load()
|
||||
fullName := err == nil && dept != nil && dept.DeptId == user.DeptId &&
|
||||
(dept.ParentId == 0 || strings.Trim(dept.Ancestors, ",") == "0")
|
||||
if err != nil {
|
||||
g.Log().Warningf(ctx, "resolve channel display organization failed: %v", err)
|
||||
}
|
||||
contexts.SetDataValue(ctx, key, channelDisplayScope{TenantID: user.TenantId, DeptID: user.DeptId, FullName: fullName})
|
||||
return fullName
|
||||
}
|
||||
|
||||
func channelDisplayNameColumn(ctx context.Context) string {
|
||||
if canViewChannelFullName(ctx) {
|
||||
return dao.TSimChannels.Columns().ChanName
|
||||
}
|
||||
return dao.TSimChannels.Columns().ChanAlias
|
||||
}
|
||||
|
||||
func channelDisplayNameSQL(ctx context.Context, table string) string {
|
||||
return fmt.Sprintf("COALESCE(NULLIF(TRIM(%s.%s), ''), '--')", table, channelDisplayNameColumn(ctx))
|
||||
}
|
||||
|
||||
func channelDisplayName(fullName bool, name, alias string) string {
|
||||
if fullName {
|
||||
return name
|
||||
}
|
||||
if alias = strings.TrimSpace(alias); alias != "" {
|
||||
return alias
|
||||
}
|
||||
return "--"
|
||||
}
|
||||
|
||||
func applyCardChannelDisplayNames(ctx context.Context, list []*model.TSimCardInfoListModel) {
|
||||
if len(list) == 0 {
|
||||
return
|
||||
}
|
||||
fullName := canViewChannelFullName(ctx)
|
||||
for _, item := range list {
|
||||
if item != nil {
|
||||
item.ChanName = channelDisplayName(fullName, item.ChanName, item.ChanAlias)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user