Files
ai_site/platform/internal/logic/applogic/members.go
2026-07-31 10:19:22 +08:00

67 lines
2.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package applogic
import (
"fmt"
"strings"
"aijianzhan/platform/internal/authx"
"aijianzhan/platform/internal/userstore"
)
type MemberLogic struct {
*AuthLogic
}
func NewMemberLogic(l *AuthLogic) *MemberLogic {
return &MemberLogic{AuthLogic: l}
}
func (l *MemberLogic) List() ([]userstore.User, error) {
tid := authx.TenantID(l.ctx)
if tid <= 0 {
return nil, fmt.Errorf("missing tenant")
}
return l.svcCtx.Users.ListMembers(l.ctx, tid)
}
// Create 创建成员用户名始终随机唯一password 为空则随机初始密码(用户登录后可自行修改)。
func (l *MemberLogic) Create(password, displayName, role string, orgUnitID int64) (*userstore.User, string, error) {
tid := authx.TenantID(l.ctx)
if tid <= 0 {
return nil, "", fmt.Errorf("missing tenant")
}
if role == "" {
role = authx.Role编辑
}
uname, err := userstore.AllocUniqueUsername(l.ctx, l.svcCtx.Users.UsernameExists)
if err != nil {
return nil, "", err
}
u, plain, err := l.svcCtx.Users.CreateMember(l.ctx, tid, uname, password, displayName, role, orgUnitID)
if err != nil {
// 极罕见冲突:再试一次
if strings.Contains(err.Error(), "already exists") {
uname2, e2 := userstore.AllocUniqueUsername(l.ctx, l.svcCtx.Users.UsernameExists)
if e2 != nil {
return nil, "", e2
}
return l.svcCtx.Users.CreateMember(l.ctx, tid, uname2, password, displayName, role, orgUnitID)
}
return nil, "", err
}
return u, plain, nil
}
func (l *MemberLogic) Update(userID int64, role string, orgUnitID int64, status string) (*userstore.User, error) {
tid := authx.TenantID(l.ctx)
if tid <= 0 {
return nil, fmt.Errorf("missing tenant")
}
if userID == authx.UserID(l.ctx) && role != "" && authx.NormalizeRole(role) != authx.Role管理员 {
if authx.IsCompanyAdmin(authx.Role(l.ctx)) {
return nil, fmt.Errorf("不能修改自己的角色,请由其他管理员操作")
}
}
return l.svcCtx.Users.UpdateMember(l.ctx, tid, userID, role, orgUnitID, status)
}