1
0

TemplateController.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. package controllers
  2. import (
  3. "errors"
  4. "strings"
  5. "github.com/astaxie/beego/orm"
  6. "github.com/mindoc-org/mindoc/conf"
  7. "github.com/mindoc-org/mindoc/models"
  8. )
  9. type TemplateController struct {
  10. BaseController
  11. BookId int
  12. }
  13. func (c *TemplateController) isPermission() (error) {
  14. c.Prepare()
  15. bookIdentify := c.GetString("identify", "")
  16. if bookIdentify == "" {
  17. return errors.New("参数错误")
  18. }
  19. if !c.Member.IsAdministrator() {
  20. book, err := models.NewBookResult().FindByIdentify(bookIdentify, c.Member.MemberId)
  21. if err != nil {
  22. if err == orm.ErrNoRows {
  23. return errors.New("项目不存在或没有权限")
  24. }
  25. return errors.New("查询项目模板失败")
  26. }
  27. c.BookId = book.BookId
  28. } else {
  29. book, err := models.NewBook().FindByIdentify(bookIdentify, "book_id")
  30. if err != nil {
  31. if err == orm.ErrNoRows {
  32. return errors.New("项目不存在或没有权限")
  33. }
  34. return errors.New("查询项目模板失败")
  35. }
  36. c.BookId = book.BookId
  37. }
  38. return nil
  39. }
  40. //获取指定模板信息
  41. func (c *TemplateController) Get() {
  42. if err := c.isPermission() ; err != nil {
  43. c.JsonResult(500,err.Error())
  44. }
  45. templateId, _ := c.GetInt("template_id",0)
  46. template,err := models.NewTemplate().Find(templateId)
  47. if err != nil {
  48. c.JsonResult(500,"读取模板失败")
  49. }
  50. if template.IsGlobal == 0 && template.BookId != c.BookId {
  51. c.JsonResult(404,"模板不存在或已删除")
  52. }
  53. c.JsonResult(0,"OK",template)
  54. }
  55. //获取模板列表
  56. func (c *TemplateController) List() {
  57. c.TplName = "template/list.tpl"
  58. if err := c.isPermission() ; err != nil {
  59. c.Data["ErrorMessage"] = err.Error()
  60. return
  61. }
  62. templateList,err := models.NewTemplate().FindAllByBookId(c.BookId)
  63. if err != nil && err != orm.ErrNoRows{
  64. c.Data["ErrorMessage"] = "查询项目模板失败"
  65. }
  66. if templateList != nil {
  67. for i,t := range templateList {
  68. templateList[i] = t.Preload()
  69. }
  70. }
  71. //c.JsonResult(0,"OK",templateList)
  72. c.Data["List"] = templateList
  73. }
  74. //添加模板
  75. func (c *TemplateController) Add() {
  76. if err := c.isPermission() ; err != nil {
  77. c.JsonResult(500,err.Error())
  78. }
  79. templateId, _ := c.GetInt("template_id",0)
  80. content := c.GetString("content")
  81. isGlobal,_ := c.GetInt("is_global",0)
  82. templateName := c.GetString("template_name","")
  83. if templateName == "" || strings.Count(templateName,"") > 300 {
  84. c.JsonResult(500,"模板名称不能为空且必须小于300字")
  85. }
  86. template := models.NewTemplate()
  87. if templateId > 0 {
  88. t,err := template.Find(templateId);
  89. if err != nil {
  90. c.JsonResult(500,"模板不存在")
  91. }
  92. template = t
  93. template.ModifyAt = c.Member.MemberId
  94. }
  95. template.TemplateId = templateId
  96. template.BookId = c.BookId
  97. template.TemplateContent = content
  98. template.TemplateName = templateName
  99. //只有管理员才能设置全局模板
  100. if c.Member.IsAdministrator() {
  101. template.IsGlobal = isGlobal
  102. }else{
  103. template.IsGlobal = 0
  104. //如果不是管理员需要判断是否有项目权限
  105. rel,err := models.NewRelationship().FindByBookIdAndMemberId(c.BookId,c.Member.MemberId)
  106. if err != nil || rel.RoleId == conf.BookObserver {
  107. c.JsonResult(403,"没有权限")
  108. }
  109. //如果修改的模板不是本人创建的,并且又不是项目创建者则禁止修改
  110. if template.MemberId > 0 && template.MemberId != c.Member.MemberId && rel.RoleId != conf.BookFounder {
  111. c.JsonResult(403,"没有权限")
  112. }
  113. }
  114. template.MemberId = c.Member.MemberId
  115. var cols []string
  116. if templateId > 0 {
  117. cols = []string{ "template_content", "modify_time","modify_at","version" }
  118. }
  119. if err := template.Save(cols...); err != nil {
  120. c.JsonResult(500,"报错模板失败")
  121. }
  122. c.JsonResult(0,"OK",template)
  123. }
  124. //删除模板
  125. func (c *TemplateController) Delete() {
  126. if err := c.isPermission() ; err != nil {
  127. c.JsonResult(500,err.Error())
  128. }
  129. templateId, _ := c.GetInt("template_id",0)
  130. template,err := models.NewTemplate().Find(templateId)
  131. if err != nil {
  132. c.JsonResult(404,"模板不存在")
  133. }
  134. if c.Member.IsAdministrator() {
  135. err := models.NewTemplate().Delete(templateId,0)
  136. if err != nil {
  137. c.JsonResult(500,"删除失败")
  138. }
  139. }else{
  140. //如果不是管理员需要判断是否有项目权限
  141. rel,err := models.NewRelationship().FindByBookIdAndMemberId(template.BookId,c.Member.MemberId)
  142. if err != nil || rel.RoleId == conf.BookObserver {
  143. c.JsonResult(403,"没有权限")
  144. }
  145. //如果是创始人或管理者可以直接删除模板
  146. if rel.RoleId == conf.BookFounder || rel.RoleId == conf.BookAdmin {
  147. err := models.NewTemplate().Delete(templateId,0)
  148. if err != nil {
  149. c.JsonResult(500,"删除失败")
  150. }
  151. }
  152. if err := models.NewTemplate().Delete(templateId,c.Member.MemberId);err != nil {
  153. c.JsonResult(500,"删除失败")
  154. }
  155. }
  156. c.JsonResult(0,"OK")
  157. }