实现用户组功能

This commit is contained in:
Minho
2018-04-19 14:58:17 +08:00
parent 8d2d4995f7
commit 12e8e72d3a
6 changed files with 260 additions and 18 deletions

View File

@@ -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
}

View File

@@ -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()

View File

@@ -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
}

View File

@@ -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)

View File

@@ -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")

View File

@@ -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",