mirror of
https://github.com/mindoc-org/mindoc.git
synced 2026-02-27 17:03:57 +08:00
实现用户组功能
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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">×</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",
|
||||
|
||||
Reference in New Issue
Block a user