更新结构

This commit is contained in:
2026-04-01 16:41:41 +08:00
parent e830896d47
commit 106abeeff6
14 changed files with 357 additions and 194 deletions
+2 -70
View File
@@ -1,17 +1,12 @@
package models
import (
"crypto/md5"
"encoding/hex"
"strings"
"time"
)
import "time"
// AdminUser 平台管理员信息表 yz_system_admin_user
type AdminUser struct {
ID uint64 `orm:"column(id);pk;auto" json:"id"`
Account string `orm:"column(account);size(64)" json:"account"`
Password string `orm:"column(password);size(32)" json:"-"`
Password string `orm:"column(password);size(255)" json:"-"`
Name *string `orm:"column(name);size(32);null" json:"name"`
Phone *string `orm:"column(phone);size(18);null" json:"phone"`
Email *string `orm:"column(email);size(255);null" json:"email"`
@@ -30,66 +25,3 @@ type AdminUser struct {
func (m *AdminUser) TableName() string {
return "yz_system_admin_user"
}
func md5Hex(s string) string {
sum := md5.Sum([]byte(s))
return hex.EncodeToString(sum[:])
}
func NormalizeAccount(s string) string {
return strings.TrimSpace(s)
}
// CreateAdminUser 创建平台管理员用户(password 会被 md5
func CreateAdminUser(account, password string, name, phone, email, qq, avatar *string, sex uint8, roleID uint64, status uint8) (uint64, error) {
u := &AdminUser{
Account: NormalizeAccount(account),
Password: md5Hex(strings.TrimSpace(password)),
Name: name,
Phone: phone,
Email: email,
Qq: qq,
Avatar: avatar,
Sex: sex,
RoleID: roleID,
Status: status,
}
id, err := Orm.Insert(u)
return uint64(id), err
}
func GetAdminUserByID(id uint64) (*AdminUser, error) {
u := &AdminUser{ID: id}
if err := Orm.Read(u); err != nil {
return nil, err
}
return u, nil
}
// UpdateAdminUser 更新用户基础信息(不含 password)
func UpdateAdminUser(id uint64, fields map[string]interface{}) error {
_, err := Orm.QueryTable(new(AdminUser)).Filter("id", id).Update(fields)
return err
}
func DeleteAdminUser(id uint64) error {
_, err := Orm.QueryTable(new(AdminUser)).Filter("id", id).Delete()
return err
}
func ChangeAdminUserPassword(id uint64, newPassword string) error {
_, err := Orm.QueryTable(new(AdminUser)).Filter("id", id).Update(map[string]interface{}{
"password": md5Hex(strings.TrimSpace(newPassword)),
})
return err
}
func ListAdminUsers() ([]AdminUser, int64, error) {
var rows []AdminUser
total, err := Orm.QueryTable(new(AdminUser)).Count()
if err != nil {
return nil, 0, err
}
_, err = Orm.QueryTable(new(AdminUser)).OrderBy("-id").All(&rows)
return rows, total, err
}
-48
View File
@@ -1,48 +0,0 @@
package models
import (
"encoding/json"
"strings"
)
// CheckUserPermission 校验用户是否拥有指定权限标识。
// 兼容 rights 为 JSON 数组 / 逗号分隔字符串;解析失败时默认放行,避免历史数据阻断请求。
func CheckUserPermission(userID int, permission string) (bool, error) {
if permission == "" || userID <= 0 {
return true, nil
}
var user AdminUser
if err := Orm.QueryTable(new(AdminUser)).Filter("id", userID).One(&user); err != nil {
return false, err
}
var role AdminRole
if err := Orm.QueryTable(new(AdminRole)).Filter("id", user.RoleID).One(&role); err != nil {
return false, err
}
if role.Rights == nil || strings.TrimSpace(*role.Rights) == "" {
return true, nil
}
rightsRaw := strings.TrimSpace(*role.Rights)
// 1) JSON 数组格式
var arr []string
if err := json.Unmarshal([]byte(rightsRaw), &arr); err == nil {
for _, p := range arr {
if strings.TrimSpace(p) == permission {
return true, nil
}
}
return false, nil
}
// 2) 逗号分隔字符串
for _, p := range strings.Split(rightsRaw, ",") {
if strings.TrimSpace(p) == permission {
return true, nil
}
}
return false, nil
}
-79
View File
@@ -24,82 +24,3 @@ type TenantUser struct {
func (m *TenantUser) TableName() string {
return "yz_system_tenant_user"
}
// BindTenantUser 绑定用户到租户(若已存在则更新状态/默认值)
func BindTenantUser(tid, uid uint64, account, name, phone, email, password *string, isDefault, status int8, remark *string) (uint64, error) {
var existed TenantUser
err := Orm.QueryTable(new(TenantUser)).
Filter("tid", tid).
Filter("uid", uid).
One(&existed)
if err == nil {
update := map[string]interface{}{
"account": account,
"name": name,
"phone": phone,
"email": email,
"password": password,
"status": status,
"is_default": isDefault,
"remark": remark,
}
_, uErr := Orm.QueryTable(new(TenantUser)).Filter("id", existed.ID).Update(update)
return existed.ID, uErr
}
m := &TenantUser{
Tid: tid,
Uid: uid,
Account: account,
Name: name,
Phone: phone,
Email: email,
Password: password,
IsDefault: isDefault,
Status: status,
Remark: remark,
}
id, iErr := Orm.Insert(m)
return uint64(id), iErr
}
// UnbindTenantUser 删除绑定关系
func UnbindTenantUser(id uint64) error {
_, err := Orm.QueryTable(new(TenantUser)).Filter("id", id).Delete()
return err
}
// ListTenantUsersByTid 根据租户ID查询绑定关系
func ListTenantUsersByTid(tid uint64) ([]TenantUser, error) {
var rows []TenantUser
_, err := Orm.QueryTable(new(TenantUser)).
Filter("tid", tid).
OrderBy("-is_default", "-id").
All(&rows)
return rows, err
}
// ListTenantBindingsByUid 根据用户ID查询绑定关系
func ListTenantBindingsByUid(uid uint64) ([]TenantUser, error) {
var rows []TenantUser
_, err := Orm.QueryTable(new(TenantUser)).
Filter("uid", uid).
OrderBy("-is_default", "-id").
All(&rows)
return rows, err
}
// SetDefaultTenant 设置用户默认租户(同一用户仅一个默认)
func SetDefaultTenant(uid, tid uint64) error {
_, err := Orm.QueryTable(new(TenantUser)).Filter("uid", uid).Update(map[string]interface{}{
"is_default": 0,
})
if err != nil {
return err
}
_, err = Orm.QueryTable(new(TenantUser)).
Filter("uid", uid).
Filter("tid", tid).
Update(map[string]interface{}{"is_default": 1})
return err
}