Browse Source

1、增加修改用户密码的命令
2、实现用户组功能

Minho 7 years ago
parent
commit
ee802230c6

+ 13 - 0
commands/command.go

@@ -90,6 +90,8 @@ func RegisterModel() {
 		new(models.DocumentHistory),
 		new(models.Migration),
 		new(models.Label),
+		new(models.MemberGroup),
+		new(models.MemberGroupMembers),
 	)
 	//migrate.RegisterMigration()
 }
@@ -136,6 +138,8 @@ func RegisterCommand() {
 	} else if len(os.Args) >= 2 && os.Args[1] == "migrate" {
 		ResolveCommand(os.Args[2:])
 		migrate.RunMigration()
+	} else if len(os.Args) >= 2 && os.Args[1] == "password" {
+		ResolveCommand(os.Args[2:])
 	}
 }
 
@@ -185,6 +189,11 @@ func ResolveCommand(args []string) {
 	flagSet.StringVar(&conf.ConfigurationFile, "config", "", "MinDoc configuration file.")
 	flagSet.StringVar(&conf.WorkingDirectory, "dir", "", "MinDoc working directory.")
 	flagSet.StringVar(&conf.LogFile, "log", "", "MinDoc log file path.")
+	var account string
+	var password string
+
+	flagSet.StringVar(&account, "account", "", "Member account.")
+	flagSet.StringVar(&password, "password", "", "Member password.")
 
 	flagSet.Parse(args)
 
@@ -230,6 +239,10 @@ func ResolveCommand(args []string) {
 	RegisterCache()
 	RegisterModel()
 	RegisterLogger(conf.LogFile)
+	//账号和密码需要解析参数后才能获取
+	if len(os.Args) >= 2 && os.Args[1] == "password" {
+		ModifyPassword(account,password)
+	}
 }
 
 //注册缓存管道

+ 39 - 0
commands/install.go

@@ -8,6 +8,7 @@ import (
 	"github.com/astaxie/beego/orm"
 	"github.com/lifei6671/mindoc/conf"
 	"github.com/lifei6671/mindoc/models"
+	"github.com/lifei6671/mindoc/utils"
 )
 
 //系统安装.
@@ -34,6 +35,44 @@ func Version() {
 	}
 }
 
+//修改用户密码
+func ModifyPassword(account,password string) {
+	if len(os.Args) < 2 {
+		fmt.Println("Parameter error.")
+		os.Exit(1)
+	}
+
+	if account == "" {
+		fmt.Println("Account cannot be empty.")
+		os.Exit(1)
+	}
+	if password == "" {
+		fmt.Println("Password cannot be empty.")
+		os.Exit(1)
+	}
+	member,err := models.NewMember().FindByAccount(account)
+
+	if err != nil {
+		fmt.Println("Failed to change password:",err)
+		os.Exit(1)
+	}
+	pwd,err := utils.PasswordHash(password)
+
+	if err != nil {
+		fmt.Println("Failed to change password:",err)
+		os.Exit(1)
+	}
+	member.Password = pwd
+
+	err = member.Update("password")
+	if err != nil {
+		fmt.Println("Failed to change password:",err)
+		os.Exit(1)
+	}
+	fmt.Println("Successfully modified.")
+	os.Exit(0)
+
+}
 //初始化数据
 func initialization() {
 

+ 13 - 9
controllers/ManagerController.go

@@ -34,6 +34,7 @@ func (c *ManagerController) Prepare() {
 }
 
 func (c *ManagerController) Index() {
+	c.Prepare()
 	c.TplName = "manager/index.tpl"
 
 	c.Data["Model"] = models.NewDashboard().Query()
@@ -249,13 +250,13 @@ func (c *ManagerController) EditMember() {
 //删除一个用户,并将该用户的所有信息转移到超级管理员上.
 func (c *ManagerController) DeleteMember() {
 	c.Prepare()
-	member_id, _ := c.GetInt("id", 0)
+	memberId, _ := c.GetInt("id", 0)
 
-	if member_id <= 0 {
+	if memberId <= 0 {
 		c.JsonResult(404, "参数错误")
 	}
 
-	member, err := models.NewMember().Find(member_id)
+	member, err := models.NewMember().Find(memberId)
 
 	if err != nil {
 		beego.Error(err)
@@ -271,7 +272,7 @@ func (c *ManagerController) DeleteMember() {
 		c.JsonResult(5001, "未能找到超级管理员")
 	}
 
-	err = models.NewMember().Delete(member_id, superMember.MemberId)
+	err = models.NewMember().Delete(memberId, superMember.MemberId)
 
 	if err != nil {
 		beego.Error(err)
@@ -657,12 +658,12 @@ func (c *ManagerController) AttachDetailed() {
 //删除附件.
 func (c *ManagerController) AttachDelete() {
 	c.Prepare()
-	attach_id, _ := c.GetInt("attach_id")
+	attachId, _ := c.GetInt("attach_id")
 
-	if attach_id <= 0 {
+	if attachId <= 0 {
 		c.Abort("404")
 	}
-	attach, err := models.NewAttachment().Find(attach_id)
+	attach, err := models.NewAttachment().Find(attachId)
 
 	if err != nil {
 		beego.Error("AttachDelete => ", err)
@@ -725,7 +726,7 @@ func (c *ManagerController) LabelDelete() {
 // 用户组列表
 func (c *ManagerController) MemberGroupList() {
 	c.Prepare()
-	c.TplName = "manager/member_group_list.gohtml"
+	c.TplName = "manager/member_group_list.tpl"
 	pageIndex, _ := c.GetInt("page", 1)
 
 	memberGroupList ,totalCount,err := models.NewMemberGroup().FindByPager(pageIndex,conf.PageSize)
@@ -746,7 +747,7 @@ func (c *ManagerController) MemberGroupList() {
 //编辑或添加用户组
 func (c *ManagerController) MemberGroupEdit() {
 	c.Prepare()
-	c.TplName = "manager/member_group_edit.gohtml"
+	c.TplName = "manager/member_group_edit.tpl"
 
 	if c.Ctx.Input.IsPost() {
 
@@ -794,6 +795,9 @@ func (c *ManagerController) MemberGroupMemberList() {
 
 }
 
+func (c *ManagerController) MemberGroupMemberEdit() {
+	c.Prepare()
+}
 
 
 

+ 4 - 0
routers/router.go

@@ -35,6 +35,10 @@ func init() {
 	beego.Router("/manager/attach/delete", &controllers.ManagerController{}, "post:AttachDelete")
 	beego.Router("/manager/label/list", &controllers.ManagerController{},"get:LabelList")
 	beego.Router("/manager/label/delete/:id", &controllers.ManagerController{},"post:LabelDelete")
+	beego.Router("/manager/user_groups", &controllers.ManagerController{},"*:MemberGroupList")
+	beego.Router("/manager/user_groups/edit/?:id", &controllers.ManagerController{},"*:MemberGroupEdit")
+	beego.Router("/manager/user_group_member", &controllers.ManagerController{},"*:MemberGroupMemberList")
+	beego.Router("/manager/user_group_member/edit/?:id", &controllers.ManagerController{},"*:MemberGroupMemberEdit")
 
 	beego.Router("/setting", &controllers.SettingController{}, "*:Index")
 	beego.Router("/setting/password", &controllers.SettingController{}, "*:Password")

+ 5 - 0
static/css/main.css

@@ -195,6 +195,11 @@ textarea{
 .manual-body .page-left .menu li.active .item{
     background-color: #DDB;
 }
+.manual-body .page-left .menu li a>i{
+    display: inline-block;
+    width: 14px;
+    text-align: center;
+}
 .manual-body .page-right {
     padding: 15px 0 15px 24px;
     margin-left: 200px;

+ 1 - 8
views/manager/index.tpl

@@ -26,14 +26,7 @@
         <div class="row">
             <div class="page-left">
                 <ul class="menu">
-                    <li class="active"><a href="{{urlfor "ManagerController.Index"}}" class="item"><i class="fa fa-dashboard" aria-hidden="true"></i> 仪表盘</a> </li>
-                    <li><a href="{{urlfor "ManagerController.Users" }}" class="item"><i class="fa fa-users" aria-hidden="true"></i> 用户管理</a> </li>
-                    <li><a href="{{urlfor "ManagerController.Books" }}" class="item"><i class="fa fa-book" aria-hidden="true"></i> 项目管理</a> </li>
-                    {{/*<li><a href="{{urlfor "ManagerController.Comments" }}" class="item"><i class="fa fa-comments-o" aria-hidden="true"></i> 评论管理</a> </li>*/}}
-                    <li><a href="{{urlfor "ManagerController.Setting" }}" class="item"><i class="fa fa-cogs" aria-hidden="true"></i> 配置管理</a> </li>
-                    <li><a href="{{urlfor "ManagerController.AttachList" }}" class="item"><i class="fa fa-cloud-upload" aria-hidden="true"></i> 附件管理</a> </li>
-                    <li><a href="{{urlfor "ManagerController.LabelList" }}" class="item"><i class="fa fa-bookmark" aria-hidden="true"></i> 标签管理</a> </li>
-
+                {{template "manager/manager_widgets.tpl.tpl" .}}
                 </ul>
             </div>
             <div class="page-right">

+ 8 - 0
views/manager/manager_widgets.tpl.tpl

@@ -0,0 +1,8 @@
+<li{{if eq .ActionName "Index"}} class="active"{{end}}><a href="{{urlfor "ManagerController.Index"}}" class="item"><i class="fa fa-dashboard" aria-hidden="true"></i> 仪表盘</a> </li>
+<li{{if eq .ActionName "Users"}} class="active"{{end}}><a href="{{urlfor "ManagerController.Users" }}" class="item"><i class="fa fa-user" aria-hidden="true"></i> 用户管理</a> </li>
+<li{{if eq .ActionName "MemberGroupList"}} class="active"{{end}}><a href="{{urlfor "ManagerController.MemberGroupList" }}" class="item"><i class="fa fa-users" aria-hidden="true"></i> 用户组管理</a> </li>
+<li{{if eq .ActionName "Books"}} class="active"{{end}}><a href="{{urlfor "ManagerController.Books" }}" class="item"><i class="fa fa-book" aria-hidden="true"></i> 项目管理</a> </li>
+{{/*<li><a href="{{urlfor "ManagerController.Comments" }}" class="item"><i class="fa fa-comments-o" aria-hidden="true"></i> 评论管理</a> </li>*/}}
+<li{{if eq .ActionName "Setting"}} class="active"{{end}}><a href="{{urlfor "ManagerController.Setting" }}" class="item"><i class="fa fa-cogs" aria-hidden="true"></i> 配置管理</a> </li>
+<li{{if eq .ActionName "AttachList"}} class="active"{{end}}><a href="{{urlfor "ManagerController.AttachList" }}" class="item"><i class="fa fa-cloud-upload" aria-hidden="true"></i> 附件管理</a> </li>
+<li{{if eq .ActionName "LabelList"}} class="active"{{end}}><a href="{{urlfor "ManagerController.LabelList" }}" class="item"><i class="fa fa-bookmark" aria-hidden="true"></i> 标签管理</a> </li>

+ 20 - 67
views/manager/member_group_list.gohtml → views/manager/member_group_list.tpl

@@ -29,23 +29,16 @@
         <div class="row">
             <div class="page-left">
                 <ul class="menu">
-                    <li><a href="{{urlfor "ManagerController.Index"}}" class="item"><i class="fa fa-dashboard" aria-hidden="true"></i> 仪表盘</a> </li>
-                    <li class="active"><a href="{{urlfor "ManagerController.Users" }}" class="item"><i class="fa fa-users" aria-hidden="true"></i> 用户管理</a> </li>
-                    <li><a href="{{urlfor "ManagerController.Books" }}" class="item"><i class="fa fa-book" aria-hidden="true"></i> 项目管理</a> </li>
-                {{/*<li><a href="{{urlfor "ManagerController.Comments" }}" class="item"><i class="fa fa-comments-o" aria-hidden="true"></i> 评论管理</a> </li>*/}}
-                    <li><a href="{{urlfor "ManagerController.Setting" }}" class="item"><i class="fa fa-cogs" aria-hidden="true"></i> 配置管理</a> </li>
-                    <li><a href="{{urlfor "ManagerController.AttachList" }}" class="item"><i class="fa fa-cloud-upload" aria-hidden="true"></i> 附件管理</a> </li>
-                    <li><a href="{{urlfor "ManagerController.LabelList" }}" class="item"><i class="fa fa-bookmark" aria-hidden="true"></i> 标签管理</a> </li>
-
+                {{template "manager/manager_widgets.tpl.tpl" .}}
                 </ul>
 
             </div>
             <div class="page-right">
                 <div class="m-box">
                     <div class="box-head">
-                        <strong class="box-title"> 成员管理</strong>
+                        <strong class="box-title"> 用户组管理</strong>
                     {{if eq .Member.Role 0}}
-                        <button type="button"  class="btn btn-success btn-sm pull-right" data-toggle="modal" data-target="#addMemberDialogModal"><i class="fa fa-user-plus" aria-hidden="true"></i> 添加成员</button>
+                        <button type="button"  class="btn btn-success btn-sm pull-right" data-toggle="modal" data-target="#addMemberGroupDialogModal"><i class="fa fa-user-plus" aria-hidden="true"></i> 添加用户组</button>
                     {{end}}
                     </div>
                 </div>
@@ -59,68 +52,28 @@
                                 <thead>
                                 <tr>
                                     <th width="80">ID</th>
-                                    <th width="80">头像</th>
-                                    <th>账号</th>
-                                    <th>姓名</th>
-                                    <th>角色</th>
-                                    <th>类型</th>
-                                    <th>状态</th>
+                                    <th>用户组名称</th>
+                                    <th>成员数量</th>
+                                    <th>创建时间</th>
+                                    <th>创建人</th>
+                                    <th>修改时间</th>
                                     <th>操作</th>
                                 </tr>
                                 </thead>
                                 <tbody>
                                 <tr v-for="item in lists">
-                                    <td>${item.member_id}</td>
-                                    <td><img :src="item.avatar" onerror="this.src='{{cdnimg "/static/images/middle.gif"}}'" class="img-circle" width="34" height="34"></td>
-                                    <td>${item.account}</td>
-                                    <td>${item.real_name}</td>
-                                    <td>
-                                        <template v-if="item.role == 0">
-                                            超级管理员
-                                        </template>
-                                        <template v-else-if="item.member_id == {{.Member.MemberId}}">
-                                            ${item.role_name}
-                                        </template>
-                                        <template v-else>
-                                            <div class="btn-group">
-                                                <button type="button" class="btn btn-default btn-sm"  data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
-                                                    ${item.role_name}
-                                                    <span class="caret"></span></button>
-                                                <ul class="dropdown-menu">
-                                                    <li><a href="javascript:;" @click="setMemberRole(item.member_id,1)">管理员</a> </li>
-                                                    <li><a href="javascript:;" @click="setMemberRole(item.member_id,2)">普通用户</a> </li>
-                                                </ul>
-                                            </div>
-                                        </template>
-                                    </td>
-                                    <td>
-                                        ${item.auth_method}
-                                    </td>
+                                    <td>${item.group_id}</td>
+                                    <td>${item.group_name}</td>
+                                    <td>${item.group_number}</td>
+                                    <td>${item.create_time}</td>
+                                    <td>${item.create_at}</td>
+                                    <td>${modify_time}</td>
                                     <td>
-                                        <template v-if="item.status == 0">
-                                            <span class="label label-success">正常</span>
-                                        </template>
-                                        <template v-else>
-                                            <span class="label label-danger">禁用</span>
-                                        </template>
-                                    </td>
-
-                                    <td>
-                                        <template v-if="item.member_id == {{.Member.MemberId}}">
-
-                                        </template>
-                                        <template v-else-if="item.role != 0">
                                             <a :href="'{{urlfor "ManagerController.EditMember" ":id" ""}}' + item.member_id" class="btn btn-sm btn-default" @click="editMember(item.member_id)">
                                                 编辑
                                             </a>
-                                            <template v-if="item.status == 0">
-                                                <button type="button" class="btn btn-danger btn-sm" @click="setMemberStatus(item.member_id,1,$event)" data-loading-text="启用中...">禁用</button>
-                                            </template>
-                                            <template v-else>
-                                                <button type="button" class="btn btn-success btn-sm" @click="setMemberStatus(item.member_id,0,$event)" data-loading-text="禁用中...">启用</button>
-                                            </template>
                                             <button type="button" class="btn btn-danger btn-sm" @click="deleteMember(item.member_id,$event)" data-loading-text="删除中">删除</button>
-                                        </template>
+
                                     </td>
                                 </tr>
                                 </tbody>
@@ -137,13 +90,13 @@
 {{template "widgets/footer.tpl" .}}
 </div>
 <!-- Modal -->
-<div class="modal fade" id="addMemberDialogModal" tabindex="-1" role="dialog" aria-labelledby="addMemberDialogModalLabel">
+<div class="modal fade" id="addMemberDialogModal" tabindex="-1" role="dialog" aria-labelledby="addMemberGroupDialogModalLabel">
     <div class="modal-dialog" role="document">
-        <form method="post" autocomplete="off" class="form-horizontal" action="{{urlfor "ManagerController.CreateMember"}}" id="addMemberDialogForm">
+        <form method="post" autocomplete="off" class="form-horizontal" action="{{urlfor "ManagerController.MemberGroupEdit"}}" id="addMemberGroupDialogForm">
             <div class="modal-content">
                 <div class="modal-header">
                     <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
-                    <h4 class="modal-title" id="myModalLabel">创建用户</h4>
+                    <h4 class="modal-title" id="myModalLabel">创建用户</h4>
                 </div>
                 <div class="modal-body">
                     <div class="form-group">
@@ -212,8 +165,8 @@
 <script src="{{cdnjs "/static/js/main.js"}}" type="text/javascript"></script>
 <script type="text/javascript">
     $(function () {
-        $("#addMemberDialogModal").on("show.bs.modal",function () {
-            window.addMemberDialogModalHtml = $(this).find("form").html();
+        $("#addMemberGroupDialogModal").on("show.bs.modal",function () {
+            window.addMemberGroupDialogModalHtml = $(this).find("form").html();
         }).on("hidden.bs.modal",function () {
             $(this).find("form").html(window.addMemberDialogModalHtml);
         });