将原先的 `vfs.go` 文件中的功能进行拆分,创建了独立的 DAO 层文件 `vfs_dao.go` 和路径处理文件 `vfs_path.go`,以提升代码结构清晰度和可维护性。 - 将数据库操作相关方法迁移至 `VfsDAO` 结构体中 - 新增 `vfs_dao.go` 文件用于管理底层数据访问对象 - 新增 `vfs_path.go` 文件专门处理路径解析逻辑 - 移除了原 `vfs.go` 中的数据库初始化、用户及节点操作等冗余代码
83 lines
1.7 KiB
Go
83 lines
1.7 KiB
Go
package vfs_service
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"fmt"
|
|
"log"
|
|
"time"
|
|
|
|
"git.zzyxyz.com/zzy/zzyxyz_go_api/internal/vfs/models"
|
|
"github.com/casbin/casbin/v2"
|
|
)
|
|
|
|
type UserService struct {
|
|
// vfs *models.VfsService
|
|
vfs *models.VfsDAO
|
|
enforcer *casbin.Enforcer
|
|
// errorHandler *ErrorHandler
|
|
}
|
|
|
|
func NewUserService(vfs *models.VfsDAO, enforcer *casbin.Enforcer) *UserService {
|
|
return &UserService{
|
|
vfs: vfs,
|
|
enforcer: enforcer,
|
|
}
|
|
}
|
|
|
|
func generateToken() string {
|
|
bytes := make([]byte, 16)
|
|
if _, err := rand.Read(bytes); err != nil {
|
|
// fallback to time-based token
|
|
return fmt.Sprintf("%x", time.Now().UnixNano())
|
|
}
|
|
return fmt.Sprintf("%x", bytes)
|
|
}
|
|
|
|
func (s *UserService) CreateUser(username string) (*string, *VFSError) {
|
|
token := generateToken()
|
|
// 创建用户
|
|
err := s.vfs.CreateUser(username, token)
|
|
if err != nil {
|
|
return nil, &VFSError{
|
|
Type: ErrorTypeUserCreationFailed,
|
|
Error: err,
|
|
}
|
|
}
|
|
|
|
// 为新用户添加角色
|
|
_, err = s.enforcer.AddRoleForUser(username, "user")
|
|
if err != nil {
|
|
log.Printf("Failed to add role for user %s: %v", username, err)
|
|
}
|
|
|
|
// 保存策略
|
|
s.enforcer.SavePolicy()
|
|
|
|
// 返回带有token的响应
|
|
return &token, nil
|
|
}
|
|
|
|
func (s *UserService) DeleteUser(username string) *VFSError {
|
|
// 删除用户
|
|
err := s.vfs.DeleteUser(username)
|
|
if err != nil {
|
|
return &VFSError{
|
|
Type: ErrorTypeUserDeletionFailed,
|
|
Error: err,
|
|
}
|
|
}
|
|
|
|
// 从权限系统中移除用户
|
|
// 移除用户的所有角色
|
|
_, err = s.enforcer.DeleteRolesForUser(username)
|
|
if err != nil {
|
|
log.Printf("Failed to delete roles for user %s: %v", username, err)
|
|
}
|
|
|
|
// 保存策略
|
|
s.enforcer.SavePolicy()
|
|
|
|
// 成功删除返回204状态
|
|
return nil
|
|
}
|