mirror of
https://github.com/mindoc-org/mindoc.git
synced 2025-06-28 15:45:35 +08:00
feat:实现项目团队管理功能
This commit is contained in:
parent
0f705f0249
commit
c666fcbed8
@ -1284,19 +1284,21 @@ func isReadable(identify, token string, c *DocumentController) *models.BookResul
|
|||||||
beego.Error(err)
|
beego.Error(err)
|
||||||
c.ShowErrorPage(500, "项目不存在")
|
c.ShowErrorPage(500, "项目不存在")
|
||||||
}
|
}
|
||||||
|
bookResult := models.NewBookResult().ToBookResult(*book)
|
||||||
// 如果文档是私有的
|
isOk := false
|
||||||
if book.PrivatelyOwned == 1 && !c.Member.IsAdministrator() {
|
|
||||||
is_ok := false
|
|
||||||
|
|
||||||
if c.Member != nil {
|
if c.Member != nil {
|
||||||
_, err := models.NewRelationship().FindForRoleId(book.BookId, c.Member.MemberId)
|
roleId, err := models.NewBook().FindForRoleId(book.BookId, c.Member.MemberId)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
is_ok = true
|
isOk = true
|
||||||
|
bookResult.MemberId = c.Member.MemberId
|
||||||
|
bookResult.RoleId = roleId
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 如果文档是私有的
|
||||||
|
if book.PrivatelyOwned == 1 && !c.Member.IsAdministrator() {
|
||||||
|
|
||||||
if book.PrivateToken != "" && !is_ok {
|
if book.PrivateToken != "" && !isOk {
|
||||||
// 如果有访问的 Token,并且该项目设置了访问 Token,并且和用户提供的相匹配,则记录到 Session 中。
|
// 如果有访问的 Token,并且该项目设置了访问 Token,并且和用户提供的相匹配,则记录到 Session 中。
|
||||||
// 如果用户未提供 Token 且用户登录了,则判断用户是否参与了该项目。
|
// 如果用户未提供 Token 且用户登录了,则判断用户是否参与了该项目。
|
||||||
// 如果用户未登录,则从 Session 中读取 Token。
|
// 如果用户未登录,则从 Session 中读取 Token。
|
||||||
@ -1305,36 +1307,21 @@ func isReadable(identify, token string, c *DocumentController) *models.BookResul
|
|||||||
} else if token, ok := c.GetSession(identify).(string); !ok || !strings.EqualFold(token, book.PrivateToken) {
|
} else if token, ok := c.GetSession(identify).(string); !ok || !strings.EqualFold(token, book.PrivateToken) {
|
||||||
c.ShowErrorPage(403, "权限不足")
|
c.ShowErrorPage(403, "权限不足")
|
||||||
}
|
}
|
||||||
} else if !is_ok {
|
} else if !isOk {
|
||||||
c.ShowErrorPage(403, "权限不足")
|
c.ShowErrorPage(403, "权限不足")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bookResult := models.NewBookResult().ToBookResult(*book)
|
//// 判断是否需要显示评论框
|
||||||
|
//if bookResult.CommentStatus == "closed" {
|
||||||
if c.Member != nil {
|
// bookResult.IsDisplayComment = false
|
||||||
rel, err := models.NewRelationship().FindByBookIdAndMemberId(bookResult.BookId, c.Member.MemberId)
|
//} else if bookResult.CommentStatus == "open" {
|
||||||
|
// bookResult.IsDisplayComment = true
|
||||||
if err == nil {
|
//} else if bookResult.CommentStatus == "group_only" {
|
||||||
bookResult.MemberId = rel.MemberId
|
// bookResult.IsDisplayComment = bookResult.RelationshipId > 0
|
||||||
bookResult.RoleId = rel.RoleId
|
//} else if bookResult.CommentStatus == "registered_only" {
|
||||||
bookResult.RelationshipId = rel.RelationshipId
|
// bookResult.IsDisplayComment = true
|
||||||
} else {
|
//}
|
||||||
//TODO 团队权限
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 判断是否需要显示评论框
|
|
||||||
if bookResult.CommentStatus == "closed" {
|
|
||||||
bookResult.IsDisplayComment = false
|
|
||||||
} else if bookResult.CommentStatus == "open" {
|
|
||||||
bookResult.IsDisplayComment = true
|
|
||||||
} else if bookResult.CommentStatus == "group_only" {
|
|
||||||
bookResult.IsDisplayComment = bookResult.RelationshipId > 0
|
|
||||||
} else if bookResult.CommentStatus == "registered_only" {
|
|
||||||
bookResult.IsDisplayComment = true
|
|
||||||
}
|
|
||||||
|
|
||||||
return bookResult
|
return bookResult
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@ package controllers
|
|||||||
import (
|
import (
|
||||||
"github.com/lifei6671/mindoc/models"
|
"github.com/lifei6671/mindoc/models"
|
||||||
"github.com/astaxie/beego/orm"
|
"github.com/astaxie/beego/orm"
|
||||||
"github.com/qiniu/x/errors.v7"
|
"errors"
|
||||||
"strings"
|
"strings"
|
||||||
"github.com/lifei6671/mindoc/conf"
|
"github.com/lifei6671/mindoc/conf"
|
||||||
)
|
)
|
||||||
@ -23,7 +23,7 @@ func (c *TemplateController) isPermission() (error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.Member.IsAdministrator() {
|
if !c.Member.IsAdministrator() {
|
||||||
book, err := models.NewBookResult().FindByIdentify(bookIdentify, c.Member.MemberId, "book_id")
|
book, err := models.NewBookResult().FindByIdentify(bookIdentify, c.Member.MemberId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err == orm.ErrNoRows {
|
if err == orm.ErrNoRows {
|
||||||
return errors.New("项目不存在或没有权限")
|
return errors.New("项目不存在或没有权限")
|
||||||
|
@ -238,6 +238,7 @@ func (book *Book) Copy(identify string) error {
|
|||||||
|
|
||||||
return o.Commit()
|
return o.Commit()
|
||||||
}
|
}
|
||||||
|
|
||||||
//递归的复制文档
|
//递归的复制文档
|
||||||
func recursiveInsertDocument(docs []*Document, o orm.Ormer, bookId int, parentId int) error {
|
func recursiveInsertDocument(docs []*Document, o orm.Ormer, bookId int, parentId int) error {
|
||||||
for _, doc := range docs {
|
for _, doc := range docs {
|
||||||
@ -313,14 +314,23 @@ func (book *Book) FindByIdentify(identify string,cols ...string) (*Book, error)
|
|||||||
//分页查询指定用户的项目
|
//分页查询指定用户的项目
|
||||||
func (book *Book) FindToPager(pageIndex, pageSize, memberId int) (books []*BookResult, totalCount int, err error) {
|
func (book *Book) FindToPager(pageIndex, pageSize, memberId int) (books []*BookResult, totalCount int, err error) {
|
||||||
|
|
||||||
relationship := NewRelationship()
|
|
||||||
|
|
||||||
o := orm.NewOrm()
|
o := orm.NewOrm()
|
||||||
|
|
||||||
sql1 := "SELECT COUNT(book.book_id) AS total_count FROM " + book.TableNameWithPrefix() + " AS book LEFT JOIN " +
|
//sql1 := "SELECT COUNT(book.book_id) AS total_count FROM " + book.TableNameWithPrefix() + " AS book LEFT JOIN " +
|
||||||
relationship.TableNameWithPrefix() + " AS rel ON book.book_id=rel.book_id AND rel.member_id = ? WHERE rel.relationship_id > 0 "
|
// relationship.TableNameWithPrefix() + " AS rel ON book.book_id=rel.book_id AND rel.member_id = ? WHERE rel.relationship_id > 0 "
|
||||||
|
|
||||||
err = o.Raw(sql1, memberId).QueryRow(&totalCount)
|
sql1 := `SELECT
|
||||||
|
count(*) AS total_count
|
||||||
|
FROM md_books AS book
|
||||||
|
LEFT JOIN md_relationship AS rel ON book.book_id = rel.book_id AND rel.member_id = ?
|
||||||
|
left join (select *
|
||||||
|
from (select book_id,team_member_id,role_id
|
||||||
|
from md_team_relationship as mtr
|
||||||
|
left join md_team_member as mtm on mtm.team_id=mtr.team_id and mtm.member_id=? order by role_id desc )as t group by t.book_id)
|
||||||
|
as team on team.book_id=book.book_id
|
||||||
|
WHERE rel.relationship_id > 0 or team.team_member_id > 0`
|
||||||
|
|
||||||
|
err = o.Raw(sql1, memberId, memberId).QueryRow(&totalCount)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
@ -328,13 +338,29 @@ func (book *Book) FindToPager(pageIndex, pageSize, memberId int) (books []*BookR
|
|||||||
|
|
||||||
offset := (pageIndex - 1) * pageSize
|
offset := (pageIndex - 1) * pageSize
|
||||||
|
|
||||||
sql2 := "SELECT book.*,rel.member_id,rel.role_id,m.account as create_name FROM " + book.TableNameWithPrefix() + " AS book" +
|
//sql2 := "SELECT book.*,rel.member_id,rel.role_id,m.account as create_name FROM " + book.TableNameWithPrefix() + " AS book" +
|
||||||
" LEFT JOIN " + relationship.TableNameWithPrefix() + " AS rel ON book.book_id=rel.book_id AND rel.member_id = ?" +
|
// " LEFT JOIN " + relationship.TableNameWithPrefix() + " AS rel ON book.book_id=rel.book_id AND rel.member_id = ?" +
|
||||||
" LEFT JOIN " + relationship.TableNameWithPrefix() + " AS rel1 ON book.book_id=rel1.book_id AND rel1.role_id=0" +
|
// " LEFT JOIN " + relationship.TableNameWithPrefix() + " AS rel1 ON book.book_id=rel1.book_id AND rel1.role_id=0" +
|
||||||
" LEFT JOIN " + NewMember().TableNameWithPrefix() + " AS m ON rel1.member_id=m.member_id " +
|
// " LEFT JOIN " + NewMember().TableNameWithPrefix() + " AS m ON rel1.member_id=m.member_id " +
|
||||||
" WHERE rel.relationship_id > 0 ORDER BY book.order_index DESC,book.book_id DESC LIMIT " + fmt.Sprintf("%d,%d", offset, pageSize)
|
// " WHERE rel.relationship_id > 0 ORDER BY book.order_index DESC,book.book_id DESC LIMIT " + fmt.Sprintf("%d,%d", offset, pageSize)
|
||||||
|
|
||||||
_, err = o.Raw(sql2, memberId).QueryRows(&books)
|
sql2 := `SELECT
|
||||||
|
book.*,
|
||||||
|
case when rel.relationship_id is null then team.role_id else rel.role_id end as role_id,
|
||||||
|
m.account as create_name
|
||||||
|
FROM md_books AS book
|
||||||
|
LEFT JOIN md_relationship AS rel ON book.book_id = rel.book_id AND rel.member_id = ?
|
||||||
|
left join (select *
|
||||||
|
from (select book_id,team_member_id,role_id
|
||||||
|
from md_team_relationship as mtr
|
||||||
|
left join md_team_member as mtm on mtm.team_id=mtr.team_id and mtm.member_id=? order by role_id desc )as t group by t.book_id) as team
|
||||||
|
on team.book_id=book.book_id
|
||||||
|
LEFT JOIN md_relationship AS rel1 ON book.book_id = rel1.book_id AND rel1.role_id = 0
|
||||||
|
LEFT JOIN md_members AS m ON rel1.member_id = m.member_id
|
||||||
|
WHERE rel.relationship_id > 0 or team.team_member_id > 0
|
||||||
|
ORDER BY book.order_index, book.book_id DESC limit ?,?`
|
||||||
|
|
||||||
|
_, err = o.Raw(sql2, memberId, memberId, offset, pageSize).QueryRows(&books)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logs.Error("分页查询项目列表 => ", err)
|
logs.Error("分页查询项目列表 => ", err)
|
||||||
return
|
return
|
||||||
@ -414,7 +440,6 @@ func (book *Book) ThoroughDeleteBook(id int) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if book.Label != "" {
|
if book.Label != "" {
|
||||||
NewLabel().InsertOrUpdateMulti(book.Label)
|
NewLabel().InsertOrUpdateMulti(book.Label)
|
||||||
}
|
}
|
||||||
@ -433,25 +458,35 @@ func (book *Book) ThoroughDeleteBook(id int) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//分页查找系统首页数据.
|
//分页查找系统首页数据.
|
||||||
func (book *Book) FindForHomeToPager(pageIndex, pageSize, member_id int) (books []*BookResult, totalCount int, err error) {
|
func (book *Book) FindForHomeToPager(pageIndex, pageSize, memberId int) (books []*BookResult, totalCount int, err error) {
|
||||||
o := orm.NewOrm()
|
o := orm.NewOrm()
|
||||||
|
|
||||||
offset := (pageIndex - 1) * pageSize
|
offset := (pageIndex - 1) * pageSize
|
||||||
//如果是登录用户
|
//如果是登录用户
|
||||||
if member_id > 0 {
|
if memberId > 0 {
|
||||||
sql1 := "SELECT COUNT(*) FROM md_books AS book LEFT JOIN md_relationship AS rel ON rel.book_id = book.book_id AND rel.member_id = ? WHERE relationship_id > 0 OR book.privately_owned = 0"
|
sql1 := `SELECT COUNT(*)
|
||||||
|
FROM md_books AS book
|
||||||
err = o.Raw(sql1, member_id).QueryRow(&totalCount)
|
LEFT JOIN md_relationship AS rel ON rel.book_id = book.book_id AND rel.member_id = ?
|
||||||
|
left join (select *
|
||||||
|
from (select book_id,team_member_id,role_id
|
||||||
|
from md_team_relationship as mtr
|
||||||
|
left join md_team_member as mtm on mtm.team_id=mtr.team_id and mtm.member_id=? order by role_id desc )as t group by t.book_id) as team on team.book_id=book.book_id
|
||||||
|
WHERE relationship_id > 0 OR book.privately_owned = 0 or team.team_member_id > 0`
|
||||||
|
err = o.Raw(sql1, memberId, memberId).QueryRow(&totalCount)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
sql2 := `SELECT book.*,rel1.*,member.account AS create_name,member.real_name FROM md_books AS book
|
sql2 := `SELECT book.*,rel1.*,member.account AS create_name,member.real_name FROM md_books AS book
|
||||||
LEFT JOIN md_relationship AS rel ON rel.book_id = book.book_id AND rel.member_id = ?
|
LEFT JOIN md_relationship AS rel ON rel.book_id = book.book_id AND rel.member_id = ?
|
||||||
|
left join (select *
|
||||||
|
from (select book_id,team_member_id,role_id
|
||||||
|
from md_team_relationship as mtr
|
||||||
|
left join md_team_member as mtm on mtm.team_id=mtr.team_id and mtm.member_id=? order by role_id desc )as t group by t.book_id) as team on team.book_id=book.book_id
|
||||||
LEFT JOIN md_relationship AS rel1 ON rel1.book_id = book.book_id AND rel1.role_id = 0
|
LEFT JOIN md_relationship AS rel1 ON rel1.book_id = book.book_id AND rel1.role_id = 0
|
||||||
LEFT JOIN md_members AS member ON rel1.member_id = member.member_id
|
LEFT JOIN md_members AS member ON rel1.member_id = member.member_id
|
||||||
WHERE rel.relationship_id > 0 OR book.privately_owned = 0 ORDER BY order_index DESC ,book.book_id DESC LIMIT ?,?`
|
WHERE rel.relationship_id > 0 OR book.privately_owned = 0 or team.team_member_id > 0 ORDER BY order_index ,book.book_id DESC LIMIT ?,?`
|
||||||
|
|
||||||
_, err = o.Raw(sql2, member_id, offset, pageSize).QueryRows(&books)
|
_, err = o.Raw(sql2, memberId, memberId, offset, pageSize).QueryRows(&books)
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
count, err1 := o.QueryTable(book.TableNameWithPrefix()).Filter("privately_owned", 0).Count()
|
count, err1 := o.QueryTable(book.TableNameWithPrefix()).Filter("privately_owned", 0).Count()
|
||||||
@ -470,9 +505,7 @@ func (book *Book) FindForHomeToPager(pageIndex, pageSize, member_id int) (books
|
|||||||
_, err = o.Raw(sql, offset, pageSize).QueryRows(&books)
|
_, err = o.Raw(sql, offset, pageSize).QueryRows(&books)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//分页全局搜索.
|
//分页全局搜索.
|
||||||
@ -483,19 +516,31 @@ func (book *Book) FindForLabelToPager(keyword string, pageIndex, pageSize, membe
|
|||||||
offset := (pageIndex - 1) * pageSize
|
offset := (pageIndex - 1) * pageSize
|
||||||
//如果是登录用户
|
//如果是登录用户
|
||||||
if memberId > 0 {
|
if memberId > 0 {
|
||||||
sql1 := "SELECT COUNT(*) FROM md_books AS book LEFT JOIN md_relationship AS rel ON rel.book_id = book.book_id AND rel.member_id = ? WHERE (relationship_id > 0 OR book.privately_owned = 0) AND book.label LIKE ?"
|
sql1 := `SELECT COUNT(*)
|
||||||
|
FROM md_books AS book
|
||||||
|
LEFT JOIN md_relationship AS rel ON rel.book_id = book.book_id AND rel.member_id = ?
|
||||||
|
left join (select *
|
||||||
|
from (select book_id,team_member_id,role_id
|
||||||
|
from md_team_relationship as mtr
|
||||||
|
left join md_team_member as mtm on mtm.team_id=mtr.team_id and mtm.member_id=? order by role_id desc )as t group by t.book_id) as team on team.book_id = book.book_id
|
||||||
|
WHERE (relationship_id > 0 OR book.privately_owned = 0 or team.team_member_id > 0) AND book.label LIKE ?`
|
||||||
|
|
||||||
err = o.Raw(sql1, memberId, keyword).QueryRow(&totalCount)
|
err = o.Raw(sql1, memberId, memberId, keyword).QueryRow(&totalCount)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
sql2 := `SELECT book.*,rel1.*,member.account AS create_name FROM md_books AS book
|
sql2 := `SELECT book.*,rel1.*,member.account AS create_name FROM md_books AS book
|
||||||
LEFT JOIN md_relationship AS rel ON rel.book_id = book.book_id AND rel.member_id = ?
|
LEFT JOIN md_relationship AS rel ON rel.book_id = book.book_id AND rel.member_id = ?
|
||||||
|
left join (select * from (select book_id,team_member_id,role_id
|
||||||
|
from md_team_relationship as mtr
|
||||||
|
left join md_team_member as mtm on mtm.team_id=mtr.team_id and mtm.member_id=? order by role_id desc )as t group by t.book_id) as team
|
||||||
|
on team.book_id = book.book_id
|
||||||
LEFT JOIN md_relationship AS rel1 ON rel1.book_id = book.book_id AND rel1.role_id = 0
|
LEFT JOIN md_relationship AS rel1 ON rel1.book_id = book.book_id AND rel1.role_id = 0
|
||||||
LEFT JOIN md_members AS member ON rel1.member_id = member.member_id
|
LEFT JOIN md_members AS member ON rel1.member_id = member.member_id
|
||||||
WHERE (rel.relationship_id > 0 OR book.privately_owned = 0) AND book.label LIKE ? ORDER BY order_index DESC ,book.book_id DESC LIMIT ?,?`
|
WHERE (rel.relationship_id > 0 OR book.privately_owned = 0 or team.team_member_id > 0)
|
||||||
|
AND book.label LIKE ? ORDER BY order_index DESC ,book.book_id DESC LIMIT ?,?`
|
||||||
|
|
||||||
_, err = o.Raw(sql2, memberId, keyword, offset, pageSize).QueryRows(&books)
|
_, err = o.Raw(sql2, memberId, memberId, keyword, offset, pageSize).QueryRows(&books)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -850,3 +895,31 @@ func (book *Book) ImportBook(zipPath string) error {
|
|||||||
book.ReleaseContent(book.BookId)
|
book.ReleaseContent(book.BookId)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (book *Book) FindForRoleId(bookId, memberId int) (conf.BookRole, error) {
|
||||||
|
o := orm.NewOrm()
|
||||||
|
|
||||||
|
var relationship Relationship
|
||||||
|
|
||||||
|
err := NewRelationship().QueryTable().Filter("book_id", bookId).Filter("member_id", memberId).One(&relationship)
|
||||||
|
|
||||||
|
if err != nil && err != orm.ErrNoRows {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
if err == nil {
|
||||||
|
return relationship.RoleId, nil
|
||||||
|
}
|
||||||
|
sql := `select role_id
|
||||||
|
from md_team_relationship as mtr
|
||||||
|
left join md_team_member as mtm using (team_id)
|
||||||
|
where mtr.book_id = ? and mtm.member_id = ? order by mtm.role_id asc limit 1;`
|
||||||
|
|
||||||
|
var roleId int
|
||||||
|
err = o.Raw(sql, bookId, memberId).QueryRow(&roleId)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
beego.Error("查询用户项目角色出错 -> book_id=", bookId, " member_id=", memberId, err)
|
||||||
|
return 0, nil
|
||||||
|
}
|
||||||
|
return conf.BookRole(roleId), nil
|
||||||
|
}
|
||||||
|
@ -54,8 +54,8 @@ type BookResult struct {
|
|||||||
AutoRelease bool `json:"auto_release"`
|
AutoRelease bool `json:"auto_release"`
|
||||||
HistoryCount int `json:"history_count"`
|
HistoryCount int `json:"history_count"`
|
||||||
|
|
||||||
RelationshipId int `json:"relationship_id"`
|
//RelationshipId int `json:"relationship_id"`
|
||||||
TeamRelationshipId int `json:"team_relationship_id"`
|
//TeamRelationshipId int `json:"team_relationship_id"`
|
||||||
RoleId conf.BookRole `json:"role_id"`
|
RoleId conf.BookRole `json:"role_id"`
|
||||||
RoleName string `json:"role_name"`
|
RoleName string `json:"role_name"`
|
||||||
Status int `json:"status"`
|
Status int `json:"status"`
|
||||||
@ -82,7 +82,7 @@ func (m *BookResult) String() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 根据项目标识查询项目以及指定用户权限的信息.
|
// 根据项目标识查询项目以及指定用户权限的信息.
|
||||||
func (m *BookResult) FindByIdentify(identify string, memberId int, cols ...string) (*BookResult, error) {
|
func (m *BookResult) FindByIdentify(identify string, memberId int) (*BookResult, error) {
|
||||||
if identify == "" || memberId <= 0 {
|
if identify == "" || memberId <= 0 {
|
||||||
return m, ErrInvalidParameter
|
return m, ErrInvalidParameter
|
||||||
}
|
}
|
||||||
@ -97,27 +97,15 @@ func (m *BookResult) FindByIdentify(identify string, memberId int, cols ...strin
|
|||||||
return m, err
|
return m, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var relationship Relationship
|
roleId,err := NewBook().FindForRoleId(book.BookId,memberId)
|
||||||
var teamMember *TeamMember
|
|
||||||
|
|
||||||
err = NewRelationship().QueryTable().Filter("book_id", book.BookId).Filter("member_id", memberId).One(&relationship)
|
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err == orm.ErrNoRows {
|
return m, ErrPermissionDenied
|
||||||
//未查到项目参与者
|
|
||||||
teamMember,err = NewTeamMember().FindByBookIdAndMemberId(book.BookId,memberId)
|
|
||||||
if err != nil {
|
|
||||||
return m,err
|
|
||||||
}
|
|
||||||
err = nil
|
|
||||||
} else {
|
|
||||||
return m, err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
var relationship2 Relationship
|
var relationship2 Relationship
|
||||||
|
|
||||||
//查找项目创始人
|
//查找项目创始人
|
||||||
err = o.QueryTable(relationship.TableNameWithPrefix()).Filter("book_id", book.BookId).Filter("role_id", 0).One(&relationship2)
|
err = NewRelationship().QueryTable().Filter("book_id", book.BookId).Filter("role_id", 0).One(&relationship2)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logs.Error("根据项目标识查询项目以及指定用户权限的信息 -> ", err)
|
logs.Error("根据项目标识查询项目以及指定用户权限的信息 -> ", err)
|
||||||
@ -130,20 +118,15 @@ func (m *BookResult) FindByIdentify(identify string, memberId int, cols ...strin
|
|||||||
}
|
}
|
||||||
|
|
||||||
m.ToBookResult(book)
|
m.ToBookResult(book)
|
||||||
|
m.RoleId = roleId
|
||||||
m.MemberId = memberId
|
m.MemberId = memberId
|
||||||
m.CreateName = member.Account
|
m.CreateName = member.Account
|
||||||
|
|
||||||
if member.RealName != "" {
|
if member.RealName != "" {
|
||||||
m.RealName = member.RealName
|
m.RealName = member.RealName
|
||||||
}
|
}
|
||||||
if teamMember != nil {
|
|
||||||
m.RoleId = teamMember.RoleId
|
|
||||||
m.TeamRelationshipId = teamMember.TeamMemberId
|
|
||||||
} else {
|
|
||||||
m.RoleId = relationship.RoleId
|
|
||||||
m.RelationshipId = relationship.RelationshipId
|
|
||||||
}
|
|
||||||
if m.RoleId == conf.BookFounder {
|
if m.RoleId == conf.BookFounder {
|
||||||
m.RoleName = "创始人"
|
m.RoleName = "创始人"
|
||||||
} else if m.RoleId == conf.BookAdmin {
|
} else if m.RoleId == conf.BookAdmin {
|
||||||
|
@ -25,13 +25,13 @@ func NewDocumentSearchResult() *DocumentSearchResult {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//分页全局搜索.
|
//分页全局搜索.
|
||||||
func (m *DocumentSearchResult) FindToPager(keyword string, page_index, page_size, member_id int) (search_result []*DocumentSearchResult, total_count int, err error) {
|
func (m *DocumentSearchResult) FindToPager(keyword string, pageIndex, pageSize, memberId int) (searchResult []*DocumentSearchResult, totalCount int, err error) {
|
||||||
o := orm.NewOrm()
|
o := orm.NewOrm()
|
||||||
|
|
||||||
offset := (page_index - 1) * page_size
|
offset := (pageIndex - 1) * pageSize
|
||||||
keyword = "%" + keyword + "%"
|
keyword = "%" + keyword + "%"
|
||||||
|
|
||||||
if member_id <= 0 {
|
if memberId <= 0 {
|
||||||
sql1 := `SELECT count(doc.document_id) as total_count FROM md_documents AS doc
|
sql1 := `SELECT count(doc.document_id) as total_count FROM md_documents AS doc
|
||||||
LEFT JOIN md_books as book ON doc.book_id = book.book_id
|
LEFT JOIN md_books as book ON doc.book_id = book.book_id
|
||||||
WHERE book.privately_owned = 0 AND (doc.document_name LIKE ? OR doc.release LIKE ?) `
|
WHERE book.privately_owned = 0 AND (doc.document_name LIKE ? OR doc.release LIKE ?) `
|
||||||
@ -43,11 +43,11 @@ WHERE book.privately_owned = 0 AND (doc.document_name LIKE ? OR doc.release LIKE
|
|||||||
WHERE book.privately_owned = 0 AND (doc.document_name LIKE ? OR doc.release LIKE ?)
|
WHERE book.privately_owned = 0 AND (doc.document_name LIKE ? OR doc.release LIKE ?)
|
||||||
ORDER BY doc.document_id DESC LIMIT ?,? `
|
ORDER BY doc.document_id DESC LIMIT ?,? `
|
||||||
|
|
||||||
err = o.Raw(sql1, keyword, keyword).QueryRow(&total_count)
|
err = o.Raw(sql1, keyword, keyword).QueryRow(&totalCount)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
_, err = o.Raw(sql2, keyword, keyword, offset, page_size).QueryRows(&search_result)
|
_, err = o.Raw(sql2, keyword, keyword, offset, pageSize).QueryRows(&searchResult)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -56,21 +56,29 @@ WHERE book.privately_owned = 0 AND (doc.document_name LIKE ? OR doc.release LIKE
|
|||||||
LEFT JOIN md_books as book ON doc.book_id = book.book_id
|
LEFT JOIN md_books as book ON doc.book_id = book.book_id
|
||||||
LEFT JOIN md_relationship AS rel ON doc.book_id = rel.book_id AND rel.role_id = 0
|
LEFT JOIN md_relationship AS rel ON doc.book_id = rel.book_id AND rel.role_id = 0
|
||||||
LEFT JOIN md_relationship AS rel1 ON doc.book_id = rel1.book_id AND rel1.member_id = ?
|
LEFT JOIN md_relationship AS rel1 ON doc.book_id = rel1.book_id AND rel1.member_id = ?
|
||||||
WHERE (book.privately_owned = 0 OR rel1.relationship_id > 0) AND (doc.document_name LIKE ? OR doc.release LIKE ?) `
|
left join (select * from (select book_id,team_member_id,role_id
|
||||||
|
from md_team_relationship as mtr
|
||||||
|
left join md_team_member as mtm on mtm.team_id=mtr.team_id and mtm.member_id=? order by role_id desc )as t group by t.book_id) as team
|
||||||
|
on team.book_id = book.book_id
|
||||||
|
WHERE (book.privately_owned = 0 OR rel1.relationship_id > 0 or team.team_member_id > 0) AND (doc.document_name LIKE ? OR doc.release LIKE ?) `
|
||||||
|
|
||||||
sql2 := `SELECT doc.document_id,doc.modify_time,doc.create_time,doc.document_name,doc.identify,doc.release as description,doc.modify_time,book.identify as book_identify,book.book_name,rel.member_id,member.account AS author FROM md_documents AS doc
|
sql2 := `SELECT doc.document_id,doc.modify_time,doc.create_time,doc.document_name,doc.identify,doc.release as description,doc.modify_time,book.identify as book_identify,book.book_name,rel.member_id,member.account AS author FROM md_documents AS doc
|
||||||
LEFT JOIN md_books as book ON doc.book_id = book.book_id
|
LEFT JOIN md_books as book ON doc.book_id = book.book_id
|
||||||
LEFT JOIN md_relationship AS rel ON book.book_id = rel.book_id AND rel.role_id = 0
|
LEFT JOIN md_relationship AS rel ON book.book_id = rel.book_id AND rel.role_id = 0
|
||||||
LEFT JOIN md_members as member ON rel.member_id = member.member_id
|
LEFT JOIN md_members as member ON rel.member_id = member.member_id
|
||||||
LEFT JOIN md_relationship AS rel1 ON doc.book_id = rel1.book_id AND rel1.member_id = ?
|
LEFT JOIN md_relationship AS rel1 ON doc.book_id = rel1.book_id AND rel1.member_id = ?
|
||||||
WHERE (book.privately_owned = 0 OR rel1.relationship_id > 0) AND (doc.document_name LIKE ? OR doc.release LIKE ?)
|
left join (select * from (select book_id,team_member_id,role_id
|
||||||
|
from md_team_relationship as mtr
|
||||||
|
left join md_team_member as mtm on mtm.team_id=mtr.team_id and mtm.member_id=? order by role_id desc )as t group by t.book_id) as team
|
||||||
|
on team.book_id = book.book_id
|
||||||
|
WHERE (book.privately_owned = 0 OR rel1.relationship_id > 0 or team.team_member_id > 0) AND (doc.document_name LIKE ? OR doc.release LIKE ?)
|
||||||
ORDER BY doc.document_id DESC LIMIT ?,? `
|
ORDER BY doc.document_id DESC LIMIT ?,? `
|
||||||
|
|
||||||
err = o.Raw(sql1, member_id, keyword, keyword).QueryRow(&total_count)
|
err = o.Raw(sql1, memberId, memberId, keyword, keyword).QueryRow(&totalCount)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
_, err = o.Raw(sql2, member_id, keyword, keyword, offset, page_size).QueryRows(&search_result)
|
_, err = o.Raw(sql2, memberId, memberId, keyword, keyword, offset, pageSize).QueryRows(&searchResult)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -29,14 +29,14 @@ func (m *Relationship) TableEngine() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 联合唯一键
|
// 联合唯一键
|
||||||
func (u *Relationship) TableUnique() [][]string {
|
func (m *Relationship) TableUnique() [][]string {
|
||||||
return [][]string{
|
return [][]string{
|
||||||
{"member_id", "book_id"},
|
{"member_id", "book_id"},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *Relationship) QueryTable() orm.QuerySeter {
|
func (m *Relationship) QueryTable() orm.QuerySeter {
|
||||||
return orm.NewOrm().QueryTable(u.TableNameWithPrefix())
|
return orm.NewOrm().QueryTable(m.TableNameWithPrefix())
|
||||||
}
|
}
|
||||||
func NewRelationship() *Relationship {
|
func NewRelationship() *Relationship {
|
||||||
return &Relationship{}
|
return &Relationship{}
|
||||||
@ -91,12 +91,12 @@ func (m *Relationship) UpdateRoleId(bookId, memberId int, roleId conf.BookRole)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Relationship) FindForRoleId(book_id, member_id int) (conf.BookRole, error) {
|
func (m *Relationship) FindForRoleId(bookId, memberId int) (conf.BookRole, error) {
|
||||||
o := orm.NewOrm()
|
o := orm.NewOrm()
|
||||||
|
|
||||||
relationship := NewRelationship()
|
relationship := NewRelationship()
|
||||||
|
|
||||||
err := o.QueryTable(m.TableNameWithPrefix()).Filter("book_id", book_id).Filter("member_id", member_id).One(relationship)
|
err := o.QueryTable(m.TableNameWithPrefix()).Filter("book_id", bookId).Filter("member_id", memberId).One(relationship)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
||||||
|
@ -44,9 +44,8 @@
|
|||||||
<div class="m-box">
|
<div class="m-box">
|
||||||
<div class="box-head">
|
<div class="box-head">
|
||||||
<strong class="box-title"> 团队管理</strong>
|
<strong class="box-title"> 团队管理</strong>
|
||||||
{{if eq .Member.Role 0}}
|
{{if eq .Model.RoleId 0}}
|
||||||
<button type="button" class="btn btn-success btn-sm pull-right" data-toggle="modal"
|
<button type="button" class="btn btn-success btn-sm pull-right" data-toggle="modal" data-target="#addTeamDialogModal"><i class="fa fa-user-plus" aria-hidden="true"></i>
|
||||||
data-target="#addTeamDialogModal"><i class="fa fa-user-plus" aria-hidden="true"></i>
|
|
||||||
添加团队
|
添加团队
|
||||||
</button>
|
</button>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
@ -43,14 +43,12 @@
|
|||||||
<div class="navbar-header pull-right manual-menu">
|
<div class="navbar-header pull-right manual-menu">
|
||||||
<a href="javascript:window.print();" id="printSinglePage" class="btn btn-default" style="margin-right: 10px;"><i class="fa fa-print"></i> 打印</a>
|
<a href="javascript:window.print();" id="printSinglePage" class="btn btn-default" style="margin-right: 10px;"><i class="fa fa-print"></i> 打印</a>
|
||||||
{{if gt .Member.MemberId 0}}
|
{{if gt .Member.MemberId 0}}
|
||||||
{{if gt .Model.RelationshipId 0}}
|
|
||||||
{{if eq .Model.RoleId 0 1 2}}
|
{{if eq .Model.RoleId 0 1 2}}
|
||||||
<div class="dropdown pull-right">
|
<div class="dropdown pull-right">
|
||||||
<a href="{{urlfor "DocumentController.Edit" ":key" .Model.Identify ":id" ""}}" class="btn btn-default"><i class="fa fa-edit" aria-hidden="true"></i> 编辑</a>
|
<a href="{{urlfor "DocumentController.Edit" ":key" .Model.Identify ":id" ""}}" class="btn btn-default"><i class="fa fa-edit" aria-hidden="true"></i> 编辑</a>
|
||||||
</div>
|
</div>
|
||||||
{{end}}
|
{{end}}
|
||||||
{{end}}
|
{{end}}
|
||||||
{{end}}
|
|
||||||
<div class="dropdown pull-right" style="margin-right: 10px;">
|
<div class="dropdown pull-right" style="margin-right: 10px;">
|
||||||
<a href="{{urlfor "HomeController.Index"}}" class="btn btn-default"><i class="fa fa-home" aria-hidden="true"></i> 首页</a>
|
<a href="{{urlfor "HomeController.Index"}}" class="btn btn-default"><i class="fa fa-home" aria-hidden="true"></i> 首页</a>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
Reference in New Issue
Block a user