auth.go 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  1. package admin
  2. import (
  3. "fmt"
  4. "gfast/app/model/auth_rule"
  5. "gfast/app/model/role"
  6. "gfast/app/model/user"
  7. "gfast/app/service/auth_service"
  8. "gfast/app/service/casbin_adapter_service"
  9. "gfast/boot"
  10. "gfast/library/response"
  11. "gfast/library/utils"
  12. "github.com/gogf/gf/frame/g"
  13. "github.com/gogf/gf/net/ghttp"
  14. "github.com/gogf/gf/text/gstr"
  15. "github.com/gogf/gf/util/gconv"
  16. "github.com/gogf/gf/util/gvalid"
  17. )
  18. //菜单用户组用户管理
  19. type Auth struct{}
  20. //菜单列表
  21. func (c *Auth) MenuList(r *ghttp.Request) {
  22. //获取菜单信息
  23. err, list := auth_service.GetMenuList("")
  24. if err != nil {
  25. g.Log().Error(err)
  26. response.FailJson(true, r, "获取数据失败")
  27. }
  28. list = utils.PushSonToParent(list)
  29. response.SusJson(true, r, "成功", g.Map{
  30. "list": list,
  31. })
  32. }
  33. //添加菜单
  34. func (c *Auth) AddMenu(r *ghttp.Request) {
  35. if r.Method == "POST" {
  36. menu := new(auth_service.MenuReq)
  37. if err := r.Parse(menu); err != nil {
  38. response.FailJson(true, r, err.(*gvalid.Error).FirstString())
  39. }
  40. //保存到数据库
  41. err, _ := auth_service.AddMenu(menu)
  42. if err != nil {
  43. g.Log().Error(err)
  44. response.FailJson(true, r, "添加菜单失败")
  45. }
  46. response.SusJson(true, r, "添加菜单成功")
  47. }
  48. //获取父级菜单信息
  49. err, list := auth_service.GetMenuList("ismenu=?", 1)
  50. if err != nil {
  51. response.FailJson(true, r, "获取数据失败")
  52. }
  53. list = utils.ParentSonSort(list)
  54. response.SusJson(true, r, "成功", g.Map{"parentList": list})
  55. }
  56. //修改菜单
  57. func (c *Auth) EditMenu(r *ghttp.Request) {
  58. id := r.GetRequestInt("id")
  59. if r.Method == "POST" {
  60. menu := new(auth_service.MenuReq)
  61. if err := r.Parse(menu); err != nil {
  62. response.FailJson(true, r, err.(*gvalid.Error).FirstString())
  63. }
  64. //保存到数据库
  65. err, _ := auth_service.EditMenu(menu, id)
  66. if err != nil {
  67. g.Log().Error(err)
  68. response.FailJson(true, r, "修改菜单失败")
  69. }
  70. response.SusJson(true, r, "修改菜单成功")
  71. }
  72. menuEntity, err := auth_rule.Model.Where("id=?", id).One()
  73. if err != nil {
  74. g.Log().Error(err)
  75. response.FailJson(true, r, "获取数据失败")
  76. }
  77. //获取父级菜单信息
  78. err, list := auth_service.GetMenuList("ismenu=?", 1)
  79. if err != nil {
  80. response.FailJson(true, r, "获取数据失败")
  81. }
  82. list = utils.ParentSonSort(list)
  83. response.SusJson(true, r, "成功", g.Map{
  84. "parentList": list,
  85. "menu": menuEntity,
  86. })
  87. }
  88. //删除菜单
  89. func (c *Auth) DeleteMenu(r *ghttp.Request) {
  90. ids := r.GetRequestArray("ids")
  91. idsInterface := make(g.Slice, len(ids))
  92. for k, v := range ids {
  93. idsInterface[k] = gconv.Int64(v)
  94. }
  95. _, err := auth_rule.Model.Where("id in(?)", idsInterface).Delete()
  96. if err != nil {
  97. g.Log().Error(err)
  98. response.FailJson(true, r, "删除失败")
  99. }
  100. response.SusJson(true, r, "删除成功")
  101. }
  102. //角色列表
  103. func (c *Auth) RoleList(r *ghttp.Request) {
  104. //获取角色列表
  105. err, list := auth_service.GetRoleList("")
  106. if err != nil {
  107. g.Log().Error(err)
  108. response.FailJson(true, r, "获取数据失败")
  109. }
  110. list = utils.ParentSonSort(list, 0, 0, "parent_id", "id", "flg", "name")
  111. response.SusJson(true, r, "成功", g.Map{
  112. "list": list,
  113. })
  114. }
  115. //添加角色
  116. func (c *Auth) AddRole(r *ghttp.Request) {
  117. //添加操作
  118. if r.Method == "POST" {
  119. //获取表单提交的数据
  120. res := r.GetFormMap()
  121. tx, err := g.DB("default").Begin() //开启事务
  122. if err != nil {
  123. g.Log().Error(err)
  124. response.FailJson(true, r, "事务处理失败")
  125. }
  126. //插入角色
  127. //添加角色获取添加的id
  128. insertId, err := auth_service.AddRole(tx, res)
  129. if err != nil {
  130. tx.Rollback() //回滚
  131. response.FailJson(true, r, err.Error())
  132. }
  133. //添加角色权限
  134. err = auth_service.AddRoleRule(res["rule"], insertId)
  135. if err != nil {
  136. tx.Rollback() //回滚
  137. g.Log().Error(err.Error())
  138. response.FailJson(true, r, "添加用户组失败")
  139. }
  140. tx.Commit()
  141. response.SusJson(true, r, "添加用户组成功")
  142. }
  143. //获取父级组
  144. err, pList := auth_service.GetRoleList("")
  145. if err != nil {
  146. g.Log().Error(err)
  147. response.FailJson(true, r, "获取父级数据失败")
  148. }
  149. pList = utils.ParentSonSort(pList, 0, 0, "parent_id", "id", "flg", "name")
  150. //获取菜单信息
  151. err, mList := auth_service.GetMenuList("")
  152. if err != nil {
  153. g.Log().Error(err)
  154. response.FailJson(true, r, "获取菜单数据失败")
  155. }
  156. mList = utils.PushSonToParent(mList)
  157. res := g.Map{
  158. "parentList": pList,
  159. "menuList": mList,
  160. }
  161. response.SusJson(true, r, "成功", res)
  162. }
  163. //修改角色
  164. func (c *Auth) EditRole(r *ghttp.Request) {
  165. id := r.GetRequestInt64("id")
  166. if r.Method == "POST" {
  167. //获取表单提交的数据
  168. res := r.GetFormMap()
  169. tx, err := g.DB("default").Begin() //开启事务
  170. if err != nil {
  171. g.Log().Error(err)
  172. response.FailJson(true, r, "事务处理失败")
  173. }
  174. //修改角色信息
  175. err = auth_service.EditRole(tx, res)
  176. if err != nil {
  177. tx.Rollback() //回滚
  178. response.FailJson(true, r, err.Error())
  179. }
  180. //添加角色权限
  181. err = auth_service.EditRoleRule(res["rule"], id)
  182. if err != nil {
  183. tx.Rollback() //回滚
  184. g.Log().Error(err.Error())
  185. response.FailJson(true, r, "添加用户组失败")
  186. }
  187. tx.Commit()
  188. response.SusJson(true, r, "修改用户组成功")
  189. }
  190. //获取角色信息
  191. role, err := role.Model.Where("id=?", id).One()
  192. if err != nil {
  193. response.FailJson(true, r, "获取角色数据失败")
  194. }
  195. //获取父级组
  196. err, pList := auth_service.GetRoleList("")
  197. if err != nil {
  198. g.Log().Error(err)
  199. response.FailJson(true, r, "获取父级数据失败")
  200. }
  201. pList = utils.ParentSonSort(pList, 0, 0, "parent_id", "id", "flg", "name")
  202. //获取菜单信息
  203. err, mList := auth_service.GetMenuList("")
  204. if err != nil {
  205. g.Log().Error(err)
  206. response.FailJson(true, r, "获取菜单数据失败")
  207. }
  208. //获取角色关联的菜单规则
  209. enforcer, err := casbin_adapter_service.GetEnforcer()
  210. if err != nil {
  211. g.Log().Error(err)
  212. response.FailJson(true, r, "获取权限处理器失败")
  213. }
  214. gp := enforcer.GetFilteredNamedPolicy("p", 0, fmt.Sprintf("g_%d", id))
  215. g.Log().Debug(gp)
  216. gpMap := map[int64]int64{}
  217. for _, v := range gp {
  218. gpMap[gconv.Int64(gstr.SubStr(v[1], 2))] = gconv.Int64(gstr.SubStr(v[1], 2))
  219. }
  220. //关联选中的权限
  221. for k, v := range mList {
  222. if _, has := gpMap[gconv.Int64(v["id"])]; has {
  223. v["isChecked"] = true
  224. } else {
  225. v["isChecked"] = false
  226. }
  227. mList[k] = v
  228. }
  229. mList = utils.PushSonToParent(mList)
  230. res := g.Map{
  231. "parentList": pList,
  232. "menuList": mList,
  233. "role": role,
  234. }
  235. response.SusJson(true, r, "成功", res)
  236. }
  237. //删除角色
  238. func (c *Auth) DeleteRole(r *ghttp.Request) {
  239. ids := r.GetRequestArray("ids")
  240. idsInterface := make(g.Slice, len(ids))
  241. for k, v := range ids {
  242. idsInterface[k] = gconv.Int64(v)
  243. }
  244. tx, err := g.DB("default").Begin() //开启事务
  245. if err != nil {
  246. g.Log().Error(err)
  247. response.FailJson(true, r, "事务处理失败")
  248. }
  249. _, err = tx.Table(role.Table).Where("id in(?)", idsInterface).Delete()
  250. if err != nil {
  251. g.Log().Error(err)
  252. tx.Rollback()
  253. response.FailJson(true, r, "删除失败")
  254. }
  255. //删除角色的权限
  256. for _, v := range idsInterface {
  257. err = auth_service.DeleteRoleRule(gconv.Int64(v))
  258. if err != nil {
  259. g.Log().Error(err)
  260. tx.Rollback()
  261. response.FailJson(true, r, "删除失败")
  262. }
  263. }
  264. tx.Commit()
  265. response.SusJson(true, r, "删除成功")
  266. }
  267. //添加管理员
  268. func (c *Auth) AddUser(r *ghttp.Request) {
  269. if r.Method == "POST" {
  270. requestData := r.GetFormMap()
  271. InsertId, err := auth_service.AddUser(requestData)
  272. if err != nil {
  273. response.FailJson(true, r, err.Error())
  274. }
  275. //设置用户所属角色信息
  276. err = auth_service.AddUserRole(requestData["role_id"], InsertId)
  277. if err != nil {
  278. g.Log().Error(err)
  279. response.FailJson(true, r, "设置用户权限失败")
  280. }
  281. response.SusJson(true, r, "添加管理员成功")
  282. }
  283. //获取角色信息
  284. err, roleList := auth_service.GetRoleList("")
  285. if err != nil {
  286. g.Log().Error(err)
  287. response.FailJson(true, r, "获取角色数据失败")
  288. }
  289. roleList = utils.ParentSonSort(roleList, 0, 0, "parent_id", "id", "flg", "name")
  290. res := g.Map{
  291. "roleList": roleList,
  292. }
  293. response.SusJson(true, r, "成功", res)
  294. }
  295. //修改管理员
  296. func (c *Auth) EditUser(r *ghttp.Request) {
  297. id := r.GetRequestInt64("id")
  298. if r.Method == "POST" {
  299. requestData := r.GetFormMap()
  300. err := auth_service.EditUser(requestData)
  301. if err != nil {
  302. response.FailJson(true, r, err.Error())
  303. }
  304. //设置用户所属角色信息
  305. err = auth_service.EditUserRole(requestData["role_id"], id)
  306. if err != nil {
  307. g.Log().Error(err)
  308. response.FailJson(true, r, "设置用户权限失败")
  309. }
  310. response.SusJson(true, r, "修改管理员成功")
  311. }
  312. //用户用户信息
  313. userEntity, err := user.Model.Where("id=?", id).One()
  314. if err != nil {
  315. g.Log().Error(err)
  316. response.FailJson(true, r, "获取用户数据失败")
  317. }
  318. //获取角色信息
  319. err, roleList := auth_service.GetRoleList("")
  320. if err != nil {
  321. g.Log().Error(err)
  322. response.FailJson(true, r, "获取角色数据失败")
  323. }
  324. roleList = utils.ParentSonSort(roleList, 0, 0, "parent_id", "id", "flg", "name")
  325. res := g.Map{
  326. "roleList": roleList,
  327. "userInfo": userEntity,
  328. }
  329. response.SusJson(true, r, "成功", res)
  330. }
  331. //用户列表
  332. func (c *Auth) UserList(r *ghttp.Request) {
  333. resp := boot.AdminGfToken.GetTokenData(r)
  334. g.Log().Debug(r.Router.Uri)
  335. r.Response.Write("hello Index-", gconv.Map(resp.Get("data"))["user_nickname"])
  336. }