mirror of
https://github.com/mindoc-org/mindoc.git
synced 2025-10-21 11:27:26 +08:00
1、实现管理员编辑用户信息
2、禁止管理员更改自己的权限和状态
This commit is contained in:
@@ -6,7 +6,14 @@ import "errors"
|
||||
var (
|
||||
// ErrMemberNoExist 用户不存在.
|
||||
ErrMemberNoExist = errors.New("用户不存在")
|
||||
ErrMemberExist = errors.New("用户已存在")
|
||||
ErrMemberDisabled = errors.New("用户被禁用")
|
||||
ErrMemberEmailEmpty = errors.New("用户邮箱不能为空")
|
||||
ErrMemberEmailExist = errors.New("用户邮箱已被使用")
|
||||
ErrMemberDescriptionTooLong = errors.New("用户描述必须小于500字")
|
||||
ErrMemberEmailFormatError = errors.New("邮箱格式不正确")
|
||||
ErrMemberPasswordFormatError = errors.New("密码必须在6-50个字符之间")
|
||||
ErrMemberAccountFormatError = errors.New("账号只能由英文字母数字组成,且在3-50个字符")
|
||||
// ErrorMemberPasswordError 密码错误.
|
||||
ErrorMemberPasswordError = errors.New("用户密码错误")
|
||||
//ErrorMemberAuthMethodInvalid 不支持此认证方式
|
||||
|
@@ -22,7 +22,7 @@ type Member struct {
|
||||
Account string `orm:"size(100);unique;column(account)" json:"account"`
|
||||
Password string `orm:"size(1000);column(password)" json:"-"`
|
||||
//认证方式: local 本地数据库 /ldap LDAP
|
||||
AuthMethod string `orm:"column(auth_method);default(local);size(50);" json:"auth_method)"`
|
||||
AuthMethod string `orm:"column(auth_method);default(local);size(50);" json:"auth_method"`
|
||||
Description string `orm:"column(description);size(2000)" json:"description"`
|
||||
Email string `orm:"size(100);column(email);unique" json:"email"`
|
||||
Phone string `orm:"size(255);column(phone);null;default(null)" json:"phone"`
|
||||
@@ -73,6 +73,7 @@ func (m *Member) Login(account string, password string) (*Member, error) {
|
||||
}
|
||||
|
||||
switch member.AuthMethod {
|
||||
case "":
|
||||
case "local":
|
||||
ok, err := utils.PasswordVerify(member.Password, password)
|
||||
if ok && err == nil {
|
||||
@@ -169,7 +170,9 @@ func (m *Member) Add() error {
|
||||
}
|
||||
|
||||
m.Password = hash
|
||||
|
||||
if m.AuthMethod == "" {
|
||||
m.AuthMethod = "local"
|
||||
}
|
||||
_, err = o.Insert(m)
|
||||
|
||||
if err != nil {
|
||||
@@ -263,3 +266,66 @@ func (m *Member) FindByFieldFirst(field string, value interface{}) (*Member, err
|
||||
|
||||
return m, err
|
||||
}
|
||||
|
||||
func (m *Member) Valid(is_hash_password bool) error {
|
||||
|
||||
//邮箱不能为空
|
||||
if m.Email == "" {
|
||||
return ErrMemberEmailEmpty
|
||||
}
|
||||
//用户描述必须小于500字
|
||||
if strings.Count(m.Description,"") > 500 {
|
||||
return ErrMemberDescriptionTooLong
|
||||
}
|
||||
//邮箱格式校验
|
||||
if ok,err := regexp.MatchString(conf.RegexpEmail,m.Email); !ok || err != nil || m.Email == "" {
|
||||
return ErrMemberEmailFormatError
|
||||
}
|
||||
//如果是未加密密码,需要校验密码格式
|
||||
if !is_hash_password {
|
||||
if l := strings.Count(m.Password,"") ; m.Password == "" || l > 50 || l < 6{
|
||||
return ErrMemberPasswordFormatError
|
||||
}
|
||||
}
|
||||
//校验邮箱是否呗使用
|
||||
if member,err := NewMember().FindByFieldFirst("email",m.Account); err == nil && member.MemberId > 0 {
|
||||
if m.MemberId > 0 && m.MemberId != member.MemberId {
|
||||
return ErrMemberEmailExist
|
||||
}
|
||||
if m.MemberId <= 0{
|
||||
return ErrMemberEmailExist
|
||||
}
|
||||
}
|
||||
if m.MemberId > 0{
|
||||
//校验用户是否存在
|
||||
if _,err := NewMember().Find(m.MemberId);err != nil {
|
||||
return err
|
||||
}
|
||||
}else{
|
||||
//校验账号格式是否正确
|
||||
if ok,err := regexp.MatchString(conf.RegexpAccount,m.Account); m.Account == "" || !ok || err != nil {
|
||||
return ErrMemberAccountFormatError
|
||||
}
|
||||
//校验账号是否被使用
|
||||
if member,err := NewMember().FindByAccount(m.Account); err == nil && member.MemberId > 0 {
|
||||
return ErrMemberExist
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user