package logic import ( "context" "fmt" "time" "git.nobla.cn/golang/aeus-admin/models" "git.nobla.cn/golang/aeus-admin/pkg/dbcache" "git.nobla.cn/golang/aeus/pkg/cache" "git.nobla.cn/golang/rest" "git.nobla.cn/golang/rest/types" "gorm.io/gorm" ) type User struct { db *gorm.DB cache cache.Cache sqlDependency *dbcache.SqlDependency } // GetPermissions 获取用户权限 func (u *User) GetPermissions(ctx context.Context, uid string) (permissions []string, err error) { permissions, err = dbcache.TryCache(ctx, fmt.Sprintf("user:permissions:%s", uid), func(tx *gorm.DB) ([]string, error) { var ss []string err = tx.Select("permission").Model(&models.RolePermission{}). Joins("LEFT JOIN users on users.role = role_permissions.role"). Where("users.uid = ?", uid). Pluck("permission", &ss). Error return ss, err }, dbcache.WithCacheDuration(time.Minute), dbcache.WithDB(u.db), dbcache.WithCache(u.cache), ) return } // GetLabels 获取用户标签 func (u *User) GetLabels(ctx context.Context) (values []*types.TypeValue[string], err error) { values, err = dbcache.TryCache(ctx, fmt.Sprintf("user:labels"), func(tx *gorm.DB) ([]*types.TypeValue[string], error) { return rest.ModelTypes[string](ctx, tx, &models.User{}, "", "username", "uid") }, dbcache.WithDB(u.db), dbcache.WithCache(u.cache), dbcache.WithDependency(u.sqlDependency), ) return } // GeUsers 获取部门列表 func (u *User) GeUsers(ctx context.Context) (values []*models.User, err error) { values, err = dbcache.TryCache(ctx, fmt.Sprintf("user:list"), func(tx *gorm.DB) ([]*models.User, error) { var items []*models.User err = tx.Find(&items).Error return items, err }, dbcache.WithDB(u.db), dbcache.WithCache(u.cache), dbcache.WithDependency(u.sqlDependency), ) return } func NewUserLogic(db *gorm.DB, ch cache.Cache) *User { return &User{ db: db, cache: ch, sqlDependency: dbcache.NewSqlDependency("SELECT MAX(`updated_at`) FROM users"), } }