12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- package model
- import (
- "crypto/aes"
- "crypto/cipher"
- "encoding/base64"
- "log"
- "math/rand"
- )
- type Admin struct {
- Id interface{} `json:"id" bson:"_id"` // 自增ID
- Username string `json:"username" bson:"username"` // 用户名
- Password string `json:"password" bson:"password"` // 密码
- RealName string `json:"real_name" bson:"real_name"` // 真实姓名
- Pid string `json:"pid" bson:"pid"` // 父级ID
- RoleId string `json:"role_id" bson:"role_id"` // 角色ID
- Status int `json:"status" bson:"status"` // 状态 0:禁用 1:启用
- ManagerAuth int8 `json:"manager_auth" bson:"manager_auth"` // 管理员权限
- LastLoginIp string `json:"last_login_ip" bson:"last_login_ip"` // 最后登录IP
- LastLoginTime int64 `json:"last_login_time" bson:"last_login_time"` // 最后登录时间
- CreatedAt int64 `json:"created_at" bson:"created_at"`
- UpdatedAt int64 `json:"updated_at" bson:"updated_at"`
- DeletedAt int64 `json:"deleted_at" bson:"deleted_at"`
- }
- func (a *Admin) TableName() string {
- return "admin"
- }
- const tokenLength = 32 // 定义token长度
- // GenerateToken 生成一个安全的token字符串
- func (a *Admin) GenerateToken() (string, error) {
- key := make([]byte, 32) // AES-256 key length
- _, err := rand.Read(key)
- if err != nil {
- log.Printf("Failed to generate random key: %s", err)
- return "", err
- }
- block, err := aes.NewCipher(key)
- if err != nil {
- log.Printf("Failed to create AES cipher: %s", err)
- return "", err
- }
- token := make([]byte, tokenLength)
- gcm, err := cipher.NewGCM(block)
- if err != nil {
- log.Printf("Failed to create GCM: %s", err)
- return "", err
- }
- nonce := make([]byte, gcm.NonceSize())
- _, err = rand.Read(nonce)
- if err != nil {
- log.Printf("Failed to generate random nonce: %s", err)
- return "", err
- }
- token = gcm.Seal(nil, nonce, token, nil)
- return base64.URLEncoding.EncodeToString(token), nil
- }
- func (a *Admin) GetID() interface{} {
- return a.Id
- }
|