aeus-admin/internal/logic/user.go

76 lines
2.2 KiB
Go

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
roleDependency *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.WithDependency(u.roleDependency),
dbcache.WithCacheDuration(time.Second*20),
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,
roleDependency: dbcache.NewSqlDependency("SELECT COUNT(*) AS count FROM `role_permissions`"),
sqlDependency: dbcache.NewSqlDependency("SELECT MAX(`updated_at`) FROM `users`"),
}
}