Minho 7 роки тому
батько
коміт
12e8e72d3a

+ 134 - 12
controllers/BookMemberController.go

@@ -8,6 +8,7 @@ import (
 	"github.com/lifei6671/mindoc/conf"
 	"github.com/lifei6671/mindoc/models"
 	"github.com/astaxie/beego"
+	"strings"
 )
 
 type BookMemberController struct {
@@ -16,9 +17,10 @@ type BookMemberController struct {
 
 // AddMember 参加参与用户.
 func (c *BookMemberController) AddMember() {
+	c.Prepare()
 	identify := c.GetString("identify")
 	account,_ := c.GetInt("account")
-	role_id, _ := c.GetInt("role_id", 3)
+	roleId, _ := c.GetInt("role_id", 3)
 	beego.Info(account)
 	if identify == "" || account <= 0 {
 		c.JsonResult(6001, "参数错误")
@@ -46,11 +48,11 @@ func (c *BookMemberController) AddMember() {
 	relationship := models.NewRelationship()
 	relationship.BookId = book.BookId
 	relationship.MemberId = member.MemberId
-	relationship.RoleId = role_id
+	relationship.RoleId = roleId
 
 	if err := relationship.Insert(); err == nil {
 		memberRelationshipResult := models.NewMemberRelationshipResult().FromMember(member)
-		memberRelationshipResult.RoleId = role_id
+		memberRelationshipResult.RoleId = roleId
 		memberRelationshipResult.RelationshipId = relationship.RelationshipId
 		memberRelationshipResult.BookId = book.BookId
 		memberRelationshipResult.ResolveRoleName()
@@ -62,14 +64,15 @@ func (c *BookMemberController) AddMember() {
 
 // 变更指定用户在指定项目中的权限
 func (c *BookMemberController) ChangeRole() {
+	c.Prepare()
 	identify := c.GetString("identify")
-	member_id, _ := c.GetInt("member_id", 0)
+	memberId, _ := c.GetInt("member_id", 0)
 	role, _ := c.GetInt("role_id", 0)
 
-	if identify == "" || member_id <= 0 {
+	if identify == "" || memberId <= 0 {
 		c.JsonResult(6001, "参数错误")
 	}
-	if member_id == c.Member.MemberId {
+	if memberId == c.Member.MemberId {
 		c.JsonResult(6006, "不能变更自己的权限")
 	}
 	book, err := models.NewBookResult().FindByIdentify(identify, c.Member.MemberId)
@@ -89,14 +92,14 @@ func (c *BookMemberController) ChangeRole() {
 
 	member := models.NewMember()
 
-	if _, err := member.Find(member_id); err != nil {
+	if _, err := member.Find(memberId); err != nil {
 		c.JsonResult(6003, "用户不存在")
 	}
 	if member.Status == 1 {
 		c.JsonResult(6004, "用户已被禁用")
 	}
 
-	relationship, err := models.NewRelationship().UpdateRoleId(book.BookId, member_id, role)
+	relationship, err := models.NewRelationship().UpdateRoleId(book.BookId, memberId, role)
 
 	if err != nil {
 		logs.Error("变更用户在项目中的权限 => ", err)
@@ -115,12 +118,12 @@ func (c *BookMemberController) ChangeRole() {
 // 删除参与者.
 func (c *BookMemberController) RemoveMember() {
 	identify := c.GetString("identify")
-	member_id, _ := c.GetInt("member_id", 0)
+	memberId, _ := c.GetInt("member_id", 0)
 
-	if identify == "" || member_id <= 0 {
+	if identify == "" || memberId <= 0 {
 		c.JsonResult(6001, "参数错误")
 	}
-	if member_id == c.Member.MemberId {
+	if memberId == c.Member.MemberId {
 		c.JsonResult(6006, "不能删除自己")
 	}
 	book, err := models.NewBookResult().FindByIdentify(identify, c.Member.MemberId)
@@ -138,7 +141,7 @@ func (c *BookMemberController) RemoveMember() {
 	if book.RoleId != conf.BookFounder && book.RoleId != conf.BookAdmin {
 		c.JsonResult(403, "权限不足")
 	}
-	err = models.NewRelationship().DeleteByBookIdAndMemberId(book.BookId, member_id)
+	err = models.NewRelationship().DeleteByBookIdAndMemberId(book.BookId, memberId)
 
 	if err != nil {
 		c.JsonResult(6007, err.Error())
@@ -146,6 +149,92 @@ func (c *BookMemberController) RemoveMember() {
 	c.JsonResult(0, "ok")
 }
 
+//添加用户组到项目
+func (c *BookMemberController) AddMemberGroup() {
+	c.Prepare()
+	memberGroupId,err := c.GetInt("group_id")
+	roleId, _ := c.GetInt("role_id", 3)
+
+	if roleId != 1 && roleId != 2 {
+		roleId = 3
+	}
+	if err != nil {
+		beego.Error("解析用户组ID时失败 =>",err)
+		c.JsonResult(6001,"参数异常")
+	}
+	if memberGroupId <= 0 {
+		c.JsonResult(6002,"参数错误")
+	}
+	bookResult,err := c.IsPermission()
+
+	if err != nil {
+		c.JsonResult(6003,err.Error())
+	}
+
+	if !models.NewMemberGroup().Exist(memberGroupId) {
+		beego.Error("查询用户组时失败 =>",err)
+		c.JsonResult(6004,"用户组不存在")
+	}
+	memberGroupMembers,err := models.NewMemberGroupMembers().FindByGroupId(memberGroupId)
+	if err != nil {
+		beego.Error("查询用户组用户时时失败 =>",err)
+		c.JsonResult(6004,"用户组成员不存在不存在")
+	}
+
+	for _,item := range memberGroupMembers {
+		member,err := models.NewMember().Find(item.MemberId)
+
+		if err != nil {
+			beego.Error("用户不存在 =>",item.MemberId)
+			continue
+		}
+		if member.Status == 1 {
+			beego.Error("用户被禁用 =>",item.MemberId)
+			continue
+		}
+
+		if _, err := models.NewRelationship().FindForRoleId(bookResult.BookId, member.MemberId); err == nil {
+			beego.Error("用户已存在该项目中 =>",item.MemberId)
+			continue
+		}
+
+		relationship := models.NewRelationship()
+		relationship.BookId = bookResult.BookId
+		relationship.MemberId = member.MemberId
+		relationship.RoleId = roleId
+		if err := relationship.Insert();err != nil {
+			beego.Error("添加用户失败 =>",err)
+		}
+	}
+	c.JsonResult(0,"ok")
+}
+
+func (c *BookMemberController)  MemberGroupList() {
+	c.Prepare()
+
+	q := strings.TrimSpace(c.GetString("q"))
+
+	members,err := models.NewMemberGroup().FindMemberGroupList(q)
+
+	if err != nil {
+		beego.Error("查询异常",err)
+		c.JsonResult(6001, "查询错误")
+	}
+	result := models.SelectMemberResult{}
+	items := make([]models.KeyValueItem, 0)
+
+	for _, member := range members {
+		item := models.KeyValueItem{}
+		item.Id = member.GroupId
+		item.Text = member.GroupName
+		items = append(items, item)
+	}
+
+	result.Result = items
+
+	c.JsonResult(0, "OK", result)
+}
+
 func (c *BookMemberController) IsPermission() (*models.BookResult, error) {
 	identify := c.GetString("identify")
 	book, err := models.NewBookResult().FindByIdentify(identify, c.Member.MemberId)
@@ -164,3 +253,36 @@ func (c *BookMemberController) IsPermission() (*models.BookResult, error) {
 	}
 	return book, nil
 }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 12 - 1
models/MemberGroupMemberModel.go

@@ -60,7 +60,7 @@ func NewMemberGroupMembers() *MemberGroupMembers {
 }
 
 // 查询用户组成员
-func (m *MemberGroupMembers) FindByGroupId(groupId int) ([]*MemberGroupMemberResult,error) {
+func (m *MemberGroupMembers) FindResultByGroupId(groupId int) ([]*MemberGroupMemberResult,error) {
 	o := orm.NewOrm()
 	var groupMembers []*MemberGroupMemberResult
 	_,err := o.QueryTable(m.TableNameWithPrefix()).Filter("group_id",groupId).All(&groupMembers);
@@ -93,6 +93,17 @@ func (m *MemberGroupMembers) FindByGroupId(groupId int) ([]*MemberGroupMemberRes
 	return groupMembers,nil
 }
 
+func (m *MemberGroupMembers) FindByGroupId(groupId int) ([]*MemberGroupMembers,error) {
+	o := orm.NewOrm()
+	var groupMembers []*MemberGroupMembers
+	_,err := o.QueryTable(m.TableNameWithPrefix()).Filter("group_id",groupId).All(&groupMembers);
+	if err != nil {
+		beego.Error("获取用户组成员出错 =>",err)
+		return nil,err
+	}
+	return groupMembers,nil
+}
+
 //判断一个用户是否加入了指定用户组
 func (m *MemberGroupMembers) IsJoin(groupId ,memberId int) (bool) {
 	o := orm.NewOrm()

+ 10 - 0
models/MemberGroupModel.go

@@ -181,8 +181,18 @@ func (m *MemberGroup) ResetMemberGroupNumber(groupId int) error {
 	return  nil
 }
 
+func (m *MemberGroup) Exist(groupId int) bool {
+	o := orm.NewOrm()
+	return o.QueryTable(m.TableNameWithPrefix()).Filter("group_id",groupId).Exist()
+}
 
+func (m *MemberGroup) FindMemberGroupList(keyword string) ([]*MemberGroup,error) {
+	o := orm.NewOrm()
+	var memberGroups []*MemberGroup
+	_,err := o.QueryTable(m.TableNameWithPrefix()).Filter("group_name__icontains",keyword).All(&memberGroups)
 
+	return memberGroups,err
+}
 
 
 

+ 4 - 1
models/member.go

@@ -69,10 +69,11 @@ func (m *Member) Login(account string, password string) (*Member, error) {
 			logs.Info("转入LDAP登陆")
 			return member.ldapLogin(account, password)
 		} else {
-			logs.Error("用户登录 => ", err)
+			logs.Error("用户登录 => ", err, account)
 			return member, ErrMemberNoExist
 		}
 	}
+	beego.Info(member)
 
 	switch member.AuthMethod {
 	case "":
@@ -81,6 +82,8 @@ func (m *Member) Login(account string, password string) (*Member, error) {
 		if ok && err == nil {
 			m.ResolveRoleName()
 			return member, nil
+		}else{
+			beego.Error("密码校验错误 =>",ok,err)
 		}
 	case "ldap":
 		return member.ldapLogin(account, password)

+ 2 - 0
routers/router.go

@@ -56,6 +56,8 @@ func init() {
 
 	beego.Router("/book/create", &controllers.BookController{}, "*:Create")
 	beego.Router("/book/users/create", &controllers.BookMemberController{}, "post:AddMember")
+	beego.Router("/book/users/add-member-group", &controllers.BookMemberController{}, "post:AddMemberGroup")
+	beego.Router("/book/users/search-member-group", &controllers.BookMemberController{}, "*:MemberGroupList")
 	beego.Router("/book/users/change", &controllers.BookMemberController{}, "post:ChangeRole")
 	beego.Router("/book/users/delete", &controllers.BookMemberController{}, "post:RemoveMember")
 	beego.Router("/book/users/import", &controllers.BookController{},"post:Import")

+ 96 - 2
views/book/users.tpl

@@ -40,6 +40,7 @@
                         <strong class="box-title"> 成员管理</strong>
                         {{if eq .Model.RoleId 0 1}}
                         <button type="button"  class="btn btn-success btn-sm pull-right" data-toggle="modal" data-target="#addBookMemberDialogModal"><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="#addBookMemberGroupDialogModal" style="margin-right: 5px;"><i class="fa fa-users" aria-hidden="true"></i> 添加用户组</button>
                         {{end}}
                     </div>
                 </div>
@@ -137,7 +138,49 @@
             </div>
         </form>
     </div>
-</div><!--END Modal-->
+</div>
+<!--END Modal-->
+<!-- Modal -->
+<div class="modal fade" id="addBookMemberGroupDialogModal" tabindex="-1" role="dialog" aria-labelledby="addBookMemberGroupDialogModalLabel">
+    <div class="modal-dialog" role="document" style="width: 600px;">
+        <form method="post" autocomplete="off" class="form-horizontal" action="{{urlfor "BookMemberController.AddMemberGroup"}}" id="addBookMemberGroupDialogForm">
+            <input type="hidden" name="identify" value="{{.Model.Identify}}">
+            <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>
+                </div>
+                <div class="modal-body">
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">用户组名称</label>
+                        <div class="col-sm-9">
+                            <select class="js-data-example-ajax form-control" multiple="multiple" name="group_id" id="member_group_name"></select>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">角色</label>
+                        <div class="col-sm-9">
+                            <select name="role_id" class="form-control">
+                                <option value="1">管理员</option>
+                                <option value="2">编辑者</option>
+                                <option value="3">观察者</option>
+                            </select>
+                        </div>
+                    </div>
+
+                    <div class="clearfix"></div>
+                </div>
+                <div class="modal-footer">
+                    <span id="form-error-message"></span>
+                    <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
+                    <button type="submit" class="btn btn-success" data-loading-text="保存中..." id="btnAddMemberGroup">保存</button>
+                </div>
+            </div>
+        </form>
+    </div>
+</div>
+<!--END Modal-->
+
 <script src="{{cdnjs "/static/jquery/1.12.4/jquery.min.js"}}"></script>
 <script src="{{cdnjs "/static/bootstrap/js/bootstrap.min.js"}}"></script>
 <script src="{{cdnjs "/static/vuejs/vue.min.js"}}"></script>
@@ -171,10 +214,11 @@
                 $("#btnAddMember").button("reset");
             }
         });
+
         $("#addBookMemberDialogModal").on("hidden.bs.modal",function () {
             $(this).find("form").html(modalCache);
         }).on("show.bs.modal",function () {
-            $('.js-data-example-ajax').select2({
+            $('#account').select2({
                 language: "zh-CN",
                 minimumInputLength : 1,
                 minimumResultsForSearch: Infinity,
@@ -197,6 +241,56 @@
                 }
             });
         });
+        /**
+         * 添加用户组
+         */
+        $("#addBookMemberGroupDialogForm").ajaxForm({
+            beforeSubmit : function () {
+                var member_group_name = $.trim($("#member_group_name").val());
+                if(member_group_name === ""){
+                    return showError("用户组名称不能为空");
+                }
+                $("#btnAddMemberGroup").button("loading");
+            },
+            success : function (res) {
+                if(res.errcode === 0){
+                    // app.lists.splice(0,0,res.data);
+                    window.document.location = document.location;
+
+                    $("#addBookMemberGroupDialogModal").modal("hide");
+                }else{
+                    showError(res.message);
+                }
+                $("#btnAddMemberGroup").button("reset");
+            }
+        });
+
+        $("#addBookMemberGroupDialogModal").on("hidden.bs.modal",function () {
+
+        }).on("show.bs.modal",function () {
+            $('#member_group_name').select2({
+                language: "zh-CN",
+                minimumInputLength : 1,
+                minimumResultsForSearch: Infinity,
+                maximumSelectionLength:1,
+                width : "100%",
+                ajax: {
+                    url: '{{urlfor "BookMemberController.MemberGroupList"}}',
+                    dataType: 'json',
+                    data: function (params) {
+                        return {
+                            q: params.term, // search term
+                            page: params.page
+                        };
+                    },
+                    processResults: function (data, params) {
+                        return {
+                            results : data.data.results
+                        }
+                    }
+                }
+            });
+        });
 
         var app = new Vue({
             el : "#userList",