zhangqian
2023-10-19 c52ee4d80de792008522edfb3f06d67b20df4cb5
同步用户只同步当前登录用户
4个文件已修改
34 ■■■■■ 已修改文件
middleware/jwt.go 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
middleware/user.go 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/user.go 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/lru.go 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
middleware/jwt.go
@@ -107,7 +107,7 @@
        }
        userInfo := service.GetUserBaseCache(claims.UserId)
        if userInfo == nil {
            SyncUserInfo()
            SyncUserInfo(claims.UserId)
            userInfo = service.GetUserBaseCache(claims.UserId)
        }
        claims.CrmUserId = userInfo.UserId
middleware/user.go
@@ -59,11 +59,11 @@
    return rsp.Result
}
func SyncUserInfo() {
func SyncUserInfo(uuid string) {
    cli := user.NewUserServiceClient(userConn)
    var users []*user.User
    var users = []*user.User{
        {Uuid: uuid},
    }
    ctx, cancel := context.WithTimeout(context.Background(), time.Second)
    defer cancel()
    r, err := cli.SyncUser(ctx, &user.UserRequest{Users: users})
@@ -75,7 +75,7 @@
    fmt.Printf("Synced: %v, Message: %s", r.List, r.Message)
    for _, member := range r.List {
        err = model.NewUserSearch(nil).FirstOrCreate(model.User{
        err = model.NewUserSearch(nil).Upsert(model.User{
            UUID:     member.Uuid,
            Username: member.Username,
            UserType: constvar.UserType(member.Usertype),
model/user.go
@@ -5,13 +5,14 @@
    "aps_crm/pkg/mysqlx"
    "fmt"
    "gorm.io/gorm"
    "gorm.io/gorm/clause"
)
type (
    // User token里边把用户ID、父用户ID、角色都带上
    User struct {
        ID           int               `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
        UUID         string            `json:"uuid" gorm:"primaryKey;type:varchar(255);comment:用户ID"`
        UUID         string            `json:"uuid" gorm:"unique;type:varchar(255);comment:用户ID"`
        Username     string            `json:"username" gorm:"index;type:varchar(255);comment:用户登录名"`
        UserType     constvar.UserType `json:"userType" gorm:"type:int(11);comment:用户类型 1超级管理员 2主账户 3子账户"`
        Password     string            `json:"-"  gorm:"type:varchar(255);comment:用户登录密码"`
@@ -277,10 +278,13 @@
    return records, nil
}
func (slf *UserSearch) FirstOrCreate(record User) error {
func (slf *UserSearch) Upsert(record User) error {
    var db = slf.build()
    if err := db.FirstOrCreate(&User{}, record).Error; err != nil {
    if err := db.Clauses(clause.OnConflict{
        Columns:   []clause.Column{{Name: "uuid"}},
        DoUpdates: clause.AssignmentColumns([]string{"uuid", "username", "user_type", "nick_name"}),
    }).Create(&record).Error; err != nil {
        return fmt.Errorf("first or create err: %v, record: %+v", err, record)
    }
service/lru.go
@@ -5,19 +5,19 @@
    "time"
)
type userBaseInfo struct {
type UserBaseInfo struct {
    UserId   int
    NickName string
}
var userCache *expirable.LRU[string, *userBaseInfo]
var userCache *expirable.LRU[string, *UserBaseInfo]
func init() {
    //make cache with 5 minutes TTL and 100 max keys
    userCache = expirable.NewLRU[string, *userBaseInfo](100, nil, time.Minute*5)
    userCache = expirable.NewLRU[string, *UserBaseInfo](100, nil, time.Minute*5)
}
func GetUserBaseCache(adminUserId string) *userBaseInfo {
func GetUserBaseCache(adminUserId string) *UserBaseInfo {
    userCache, ok := userCache.Get(adminUserId)
    if !ok {
        userService := UserService{}
@@ -25,7 +25,7 @@
        if err != nil {
            return nil
        }
        baseInfo := &userBaseInfo{
        baseInfo := &UserBaseInfo{
            UserId:   userRecord.ID,
            NickName: userRecord.NickName,
        }
@@ -35,6 +35,6 @@
    return userCache
}
func SetUserBaseCache(adminUserId string, user *userBaseInfo) {
func SetUserBaseCache(adminUserId string, user *UserBaseInfo) {
    _ = userCache.Add(adminUserId, user)
}