auth.go 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. package admin
  2. import (
  3. "fmt"
  4. "gfast/app/model/auth_rule"
  5. "gfast/app/model/role"
  6. "gfast/app/service/auth_service"
  7. "gfast/app/service/casbin_adapter_service"
  8. "gfast/library/response"
  9. "gfast/library/utils"
  10. "github.com/gogf/gf/frame/g"
  11. "github.com/gogf/gf/net/ghttp"
  12. "github.com/gogf/gf/text/gstr"
  13. "github.com/gogf/gf/util/gconv"
  14. "github.com/gogf/gf/util/gvalid"
  15. )
  16. //菜单用户组用户管理
  17. type Auth struct{}
  18. //菜单列表
  19. func (c *Auth) MenuList(r *ghttp.Request) {
  20. //获取菜单信息
  21. err, list := auth_service.GetMenuList("")
  22. if err != nil {
  23. g.Log().Error(err)
  24. response.FailJson(true, r, "获取数据失败")
  25. }
  26. list = utils.PushSonToParent(list)
  27. response.SusJson(true, r, "成功", g.Map{
  28. "list": list,
  29. })
  30. }
  31. //添加菜单
  32. func (c *Auth) AddMenu(r *ghttp.Request) {
  33. if r.Method == "POST" {
  34. menu := new(auth_service.MenuReq)
  35. if err := r.Parse(menu); err != nil {
  36. response.FailJson(true, r, err.(*gvalid.Error).FirstString())
  37. }
  38. //保存到数据库
  39. err, _ := auth_service.AddMenu(menu)
  40. if err != nil {
  41. g.Log().Error(err)
  42. response.FailJson(true, r, "添加菜单失败")
  43. }
  44. response.SusJson(true, r, "添加菜单成功")
  45. }
  46. //获取父级菜单信息
  47. err, list := auth_service.GetMenuList("ismenu=?", 1)
  48. if err != nil {
  49. response.FailJson(true, r, "获取数据失败")
  50. }
  51. list = utils.ParentSonSort(list)
  52. response.SusJson(true, r, "成功", g.Map{"parentList": list})
  53. }
  54. //修改菜单
  55. func (c *Auth) EditMenu(r *ghttp.Request) {
  56. id := r.GetRequestInt("id")
  57. if r.Method == "POST" {
  58. menu := new(auth_service.MenuReq)
  59. if err := r.Parse(menu); err != nil {
  60. response.FailJson(true, r, err.(*gvalid.Error).FirstString())
  61. }
  62. //保存到数据库
  63. err, _ := auth_service.EditMenu(menu, id)
  64. if err != nil {
  65. g.Log().Error(err)
  66. response.FailJson(true, r, "修改菜单失败")
  67. }
  68. response.SusJson(true, r, "修改菜单成功")
  69. }
  70. menuEntity, err := auth_rule.Model.Where("id=?", id).One()
  71. if err != nil {
  72. g.Log().Error(err)
  73. response.FailJson(true, r, "获取数据失败")
  74. }
  75. //获取父级菜单信息
  76. err, list := auth_service.GetMenuList("ismenu=?", 1)
  77. if err != nil {
  78. response.FailJson(true, r, "获取数据失败")
  79. }
  80. list = utils.ParentSonSort(list)
  81. response.SusJson(true, r, "成功", g.Map{
  82. "parentList": list,
  83. "menu": menuEntity,
  84. })
  85. }
  86. //删除菜单
  87. func (c *Auth) DeleteMenu(r *ghttp.Request) {
  88. ids := r.GetRequestArray("ids")
  89. idsInterface := make(g.Slice, len(ids))
  90. for k, v := range ids {
  91. idsInterface[k] = gconv.Int(v)
  92. }
  93. _, err := auth_rule.Model.Where("id in(?)", idsInterface).Delete()
  94. if err != nil {
  95. g.Log().Error(err)
  96. response.FailJson(true, r, "删除失败")
  97. }
  98. response.SusJson(true, r, "删除成功")
  99. }
  100. //角色列表
  101. func (c *Auth) RoleList(r *ghttp.Request) {
  102. //获取角色列表
  103. }
  104. //添加角色
  105. func (c *Auth) AddRole(r *ghttp.Request) {
  106. //添加操作
  107. if r.Method == "POST" {
  108. //获取表单提交的数据
  109. res := r.GetFormMap()
  110. tx, err := g.DB("default").Begin() //开启事务
  111. if err != nil {
  112. g.Log().Error(err)
  113. response.FailJson(true, r, "事务处理失败")
  114. }
  115. //插入角色
  116. //添加角色获取添加的id
  117. insertId, err := auth_service.AddRole(tx, res)
  118. if err != nil {
  119. tx.Rollback() //回滚
  120. response.FailJson(true, r, err.Error())
  121. }
  122. //添加角色权限
  123. err = auth_service.AddRoleRule(res["rule"], insertId)
  124. if err != nil {
  125. tx.Rollback() //回滚
  126. g.Log().Error(err.Error())
  127. response.FailJson(true, r, "添加用户组失败")
  128. }
  129. tx.Commit()
  130. response.SusJson(true, r, "添加用户组成功")
  131. }
  132. //获取父级组
  133. err, pList := auth_service.GetRoleList("")
  134. if err != nil {
  135. g.Log().Error(err)
  136. response.FailJson(true, r, "获取父级数据失败")
  137. }
  138. pList = utils.ParentSonSort(pList, 0, 0, "parent_id", "id", "flg", "name")
  139. //获取菜单信息
  140. err, mList := auth_service.GetMenuList("")
  141. if err != nil {
  142. g.Log().Error(err)
  143. response.FailJson(true, r, "获取菜单数据失败")
  144. }
  145. mList = utils.PushSonToParent(mList)
  146. res := g.Map{
  147. "parentList": pList,
  148. "menuList": mList,
  149. }
  150. response.SusJson(true, r, "成功", res)
  151. }
  152. //修改角色
  153. func (c *Auth) EditRole(r *ghttp.Request) {
  154. id := r.GetRequestInt64("id")
  155. if r.Method == "POST" {
  156. //获取表单提交的数据
  157. res := r.GetFormMap()
  158. tx, err := g.DB("default").Begin() //开启事务
  159. if err != nil {
  160. g.Log().Error(err)
  161. response.FailJson(true, r, "事务处理失败")
  162. }
  163. //修改角色信息
  164. err = auth_service.EditRole(tx, res)
  165. if err != nil {
  166. tx.Rollback() //回滚
  167. response.FailJson(true, r, err.Error())
  168. }
  169. //添加角色权限
  170. err = auth_service.EditRoleRule(res["rule"], id)
  171. if err != nil {
  172. tx.Rollback() //回滚
  173. g.Log().Error(err.Error())
  174. response.FailJson(true, r, "添加用户组失败")
  175. }
  176. tx.Commit()
  177. response.SusJson(true, r, "修改用户组成功")
  178. }
  179. //获取角色信息
  180. role, err := role.Model.Where("id=?", id).One()
  181. if err != nil {
  182. response.FailJson(true, r, "获取角色数据失败")
  183. }
  184. //获取父级组
  185. err, pList := auth_service.GetRoleList("")
  186. if err != nil {
  187. g.Log().Error(err)
  188. response.FailJson(true, r, "获取父级数据失败")
  189. }
  190. pList = utils.ParentSonSort(pList, 0, 0, "parent_id", "id", "flg", "name")
  191. //获取菜单信息
  192. err, mList := auth_service.GetMenuList("")
  193. if err != nil {
  194. g.Log().Error(err)
  195. response.FailJson(true, r, "获取菜单数据失败")
  196. }
  197. //获取角色关联的菜单规则
  198. enforcer, err := casbin_adapter_service.GetEnforcer()
  199. if err != nil {
  200. g.Log().Error(err)
  201. response.FailJson(true, r, "获取权限处理器失败")
  202. }
  203. gp := enforcer.GetFilteredNamedPolicy("p", 0, fmt.Sprintf("g_%d", id))
  204. g.Log().Debug(gp)
  205. gpMap := map[int64]int64{}
  206. for _, v := range gp {
  207. gpMap[gconv.Int64(gstr.SubStr(v[1], 2))] = gconv.Int64(gstr.SubStr(v[1], 2))
  208. }
  209. //关联选中的权限
  210. for k, v := range mList {
  211. if _, has := gpMap[gconv.Int64(v["id"])]; has {
  212. v["isChecked"] = true
  213. } else {
  214. v["isChecked"] = false
  215. }
  216. mList[k] = v
  217. }
  218. mList = utils.PushSonToParent(mList)
  219. res := g.Map{
  220. "parentList": pList,
  221. "menuList": mList,
  222. "role": role,
  223. }
  224. response.SusJson(true, r, "成功", res)
  225. }