From a05a13dd4e262ec34fb5fa131bf7e55733cb7e7f Mon Sep 17 00:00:00 2001 From: lifei6671 Date: Sun, 23 Apr 2017 12:48:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E7=94=A8=E6=88=B7=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/app.conf | 2 +- conf/enumerate.go | 8 ++ controllers/manager.go | 180 +++++++++++++++++++++++++++++++++++++++- models/book.go | 30 ++++++- models/member.go | 22 ++++- models/member_result.go | 1 + 6 files changed, 237 insertions(+), 6 deletions(-) diff --git a/conf/app.conf b/conf/app.conf index 7c1ff29e..b46217db 100644 --- a/conf/app.conf +++ b/conf/app.conf @@ -12,7 +12,7 @@ base_url = https://hook.iminho.me timezone = Asia/Shanghai #数据库配置 -db_host=192.168.3.104 +db_host=127.0.0.1 db_port=3306 db_database=mindoc_db db_username=root diff --git a/conf/enumerate.go b/conf/enumerate.go index 1f073318..cf14252b 100644 --- a/conf/enumerate.go +++ b/conf/enumerate.go @@ -6,6 +6,10 @@ import "github.com/astaxie/beego" // 登录用户的Session名 const LoginSessionName = "LoginSessionName" +const RegexpEmail = `^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$` + +const RegexpAccount = `^[a-zA-Z][a-zA-z0-9]{2,50}$` + // app_key func GetAppKey() (string) { return beego.AppConfig.DefaultString("app_key","go-git-webhook") @@ -13,4 +17,8 @@ func GetAppKey() (string) { func GetDatabasePrefix() string { return beego.AppConfig.DefaultString("db_prefix","md_") +} +//获取默认头像 +func GetDefaultAvatar() string { + return beego.AppConfig.DefaultString("avatar","/static/images/headimgurl.jpg") } \ No newline at end of file diff --git a/controllers/manager.go b/controllers/manager.go index 3bca7b41..cde33411 100644 --- a/controllers/manager.go +++ b/controllers/manager.go @@ -1,5 +1,18 @@ package controllers +import ( + + "encoding/json" + "html/template" + "strings" + "regexp" + + "github.com/lifei6671/godoc/conf" + "github.com/astaxie/beego/logs" + "github.com/lifei6671/godoc/utils" + "github.com/lifei6671/godoc/models" +) + type ManagerController struct { BaseController } @@ -8,6 +21,167 @@ func (p *ManagerController) Index() { p.TplName = "manager/index.tpl" } -func (p *ManagerController) Users() { - p.TplName = "manager/users.tpl" -} \ No newline at end of file +// 用户列表. +func (c *ManagerController) Users() { + c.Prepare() + c.TplName = "manager/users.tpl" + + if c.Member.Role != 0 { + c.Abort("403") + } + + pageIndex,_ := c.GetInt("page",0) + + members,totalCount,err := models.NewMember().FindToPager(pageIndex,15) + + if err != nil { + c.Data["ErrorMessage"] = err.Error() + return + } + + html := utils.GetPagerHtml(c.Ctx.Request.RequestURI,pageIndex,10,totalCount) + + c.Data["PageHtml"] = html + b,err := json.Marshal(members) + + if err != nil { + c.Data["Result"] = template.JS("[]") + }else{ + c.Data["Result"] = template.JS(string(b)) + } +} + +// 添加用户 +func (c *ManagerController) CreateMember() { + c.Prepare() + if c.Member.Role != 0{ + c.Abort("403") + } + + account := strings.TrimSpace(c.GetString("account")) + password1 := strings.TrimSpace(c.GetString("password1")) + password2 := strings.TrimSpace(c.GetString("password2")) + email := strings.TrimSpace(c.GetString("email")) + phone := strings.TrimSpace(c.GetString("phone")) + role,_ := c.GetInt("role",1) + status,_ := c.GetInt("status",0) + + if ok,err := regexp.MatchString(conf.RegexpAccount,account); account == "" || !ok || err != nil { + c.JsonResult(6001,"账号只能由英文字母数字组成,且在3-50个字符") + } + if l := strings.Count(password1,"") ; password1 == "" || l > 50 || l < 6{ + c.JsonResult(6002,"密码必须在6-50个字符之间") + } + if password1 != password2 { + c.JsonResult(6003,"确认密码不正确") + } + if ok,err := regexp.MatchString(conf.RegexpEmail,email); !ok || err != nil || email == "" { + c.JsonResult(6004,"邮箱不能为空") + } + if role != 0 && role != 1 { + role = 1 + } + if status != 0 && status != 1 { + status = 0 + } + + member := models.NewMember() + + if err := member.FindByAccount(account); err != nil { + c.JsonResult(6005,"账号已存在") + } + + member.Account = account + member.Password = password1 + member.Role = role + member.Avatar = conf.GetDefaultAvatar() + member.CreateAt = c.Member.MemberId + member.Email = email + if phone != "" { + member.Phone = phone + } + + if err := member.Add(); err != nil { + c.JsonResult(6006,err.Error()) + } + + c.JsonResult(0,"ok",member) +} + +//更新用户状态. +func (c *ManagerController) UpdateMemberStatus() { + c.Prepare() + + if c.Member.Role != 0 { + c.Abort("403") + } + + member_id,_ := c.GetInt("member_id",0) + status ,_ := c.GetInt("status",0) + + if member_id <= 0 { + c.JsonResult(6001,"参数错误") + } + if status != 0 && status != 1 { + status = 0 + } + member := models.NewMember() + + if err := member.Find(member_id); err != nil { + c.JsonResult(6002,"用户不存在") + } + member.Status = status + + if err := member.Update();err != nil { + logs.Error("",err) + c.JsonResult(6003,"用户状态设置失败") + } + c.JsonResult(0,"ok",member) +} + +func (c *ManagerController) Books() { + c.Prepare() + c.TplName = "manager/books.tpl" + +} + +func (c *ManagerController) DeleteBook() { + c.Prepare() + if c.Member.Role != 0 { + c.Abort("403") + } +} + +func (c *ManagerController) Comments() { + c.Prepare() + if c.Member.Role != 0 { + c.Abort("403") + } +} + +func (c *ManagerController) DeleteComment() { + c.Prepare() + if c.Member.Role != 0 { + c.Abort("403") + } +} + + + + + + + + + + + + + + + + + + + + diff --git a/models/book.go b/models/book.go index 36638e88..3570779d 100644 --- a/models/book.go +++ b/models/book.go @@ -137,4 +137,32 @@ func (m *Book) FindToPager(pageIndex, pageSize ,memberId int) (books []BookResul } } return -} \ No newline at end of file +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/models/member.go b/models/member.go index 7b0ca226..5e843f83 100644 --- a/models/member.go +++ b/models/member.go @@ -109,7 +109,27 @@ func (m *Member) FindByAccount (account string) error { return err } - +func (m *Member) FindToPager(pageIndex, pageSize int) ([]Member,int,error) { + o := orm.NewOrm() + + var members []Member + + offset := (pageIndex - 1) * pageSize + + totalCount,err := o.QueryTable(m.TableNameWithPrefix()).Count() + + if err != nil { + return members,0,err + } + + _,err = o.QueryTable(m.TableNameWithPrefix()).Offset(offset).Limit(pageSize).All(&members) + + if err != nil { + return members,0,err + } + + return members,totalCount,nil +} diff --git a/models/member_result.go b/models/member_result.go index 6291a875..b570d90d 100644 --- a/models/member_result.go +++ b/models/member_result.go @@ -58,3 +58,4 @@ func (m *MemberRelationshipResult) FindForUsersByBookId(book_id ,pageIndex, page +