更新结构
This commit is contained in:
+2
-70
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user