auth_rule.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. package auth_service
  2. import (
  3. "fmt"
  4. "gfast/app/model/admin/auth_rule"
  5. "gfast/app/model/admin/role"
  6. "gfast/app/model/admin/user"
  7. "gfast/app/service/casbin_adapter_service"
  8. "gfast/library/utils"
  9. "github.com/gogf/gf/database/gdb"
  10. "github.com/gogf/gf/util/gconv"
  11. )
  12. //获取isMenu==1菜单列表
  13. func GetIsMenuList() ([]*auth_rule.Entity, error) {
  14. list, err := GetMenuList()
  15. if err != nil {
  16. return nil, err
  17. }
  18. var gList = make([]*auth_rule.Entity, 0, len(list))
  19. for _, v := range list {
  20. if v.Ismenu == 1 {
  21. gList = append(gList, v)
  22. }
  23. }
  24. return gList, nil
  25. }
  26. //获取isMenu=1且status=1的菜单列表
  27. func GetIsMenuStatusList() ([]*auth_rule.Entity, error) {
  28. list, err := GetMenuList()
  29. if err != nil {
  30. return nil, err
  31. }
  32. var gList = make([]*auth_rule.Entity, 0, len(list))
  33. for _, v := range list {
  34. if v.Ismenu == 1 && v.Status == 1 {
  35. gList = append(gList, v)
  36. }
  37. }
  38. return gList, nil
  39. }
  40. //获取status==1的菜单列表
  41. func GetMenuIsStatusList() ([]*auth_rule.Entity, error) {
  42. list, err := GetMenuList()
  43. if err != nil {
  44. return nil, err
  45. }
  46. var gList = make([]*auth_rule.Entity, 0, len(list))
  47. for _, v := range list {
  48. if v.Status == 1 {
  49. gList = append(gList, v)
  50. }
  51. }
  52. return gList, nil
  53. }
  54. //获取所有菜单
  55. func GetMenuList() (list []*auth_rule.Entity, err error) {
  56. return auth_rule.GetMenuList()
  57. }
  58. //检查菜单规则是否存在
  59. func CheckMenuNameUnique(name string, id int) bool {
  60. return auth_rule.CheckMenuNameUnique(name, id)
  61. }
  62. // 添加菜单操作
  63. func AddMenu(req *auth_rule.MenuReq) (err error, insertId int64) {
  64. return auth_rule.Add(req)
  65. }
  66. //修改菜单操作
  67. func EditMenu(req *auth_rule.MenuReq, id int) (err error, rows int64) {
  68. return auth_rule.Edit(req, id)
  69. }
  70. //获取用户组(角色)列表
  71. func GetRoleList() (list []*role.Entity, err error) {
  72. return role.GetList()
  73. }
  74. //保存角色信息并返回插入的id
  75. func AddRole(tx *gdb.TX, data map[string]interface{}) (InsId int64, err error) {
  76. return role.Add(tx, data)
  77. }
  78. //添加角色授权规则
  79. func AddRoleRule(iRule interface{}, roleId int64) (err error) {
  80. enforcer, e := casbin_adapter_service.GetEnforcer()
  81. if e != nil {
  82. err = e
  83. return
  84. }
  85. rule := gconv.Strings(iRule)
  86. for _, v := range rule {
  87. _, err = enforcer.AddPolicy(fmt.Sprintf("g_%d", roleId), fmt.Sprintf("r_%s", v), "All")
  88. if err != nil {
  89. return
  90. }
  91. }
  92. return
  93. }
  94. //修改角色信息操作
  95. func EditRole(tx *gdb.TX, data map[string]interface{}) (err error) {
  96. return role.Edit(tx, data)
  97. }
  98. //修改角色的授权规则
  99. func EditRoleRule(iRule interface{}, roleId int64) (err error) {
  100. enforcer, e := casbin_adapter_service.GetEnforcer()
  101. if e != nil {
  102. err = e
  103. return
  104. }
  105. //查询当前权限
  106. gp := enforcer.GetFilteredPolicy(0, fmt.Sprintf("g_%d", roleId))
  107. //删除旧权限
  108. for _, v := range gp {
  109. _, e = enforcer.RemovePolicy(v)
  110. if e != nil {
  111. err = e
  112. return
  113. }
  114. }
  115. rule := gconv.Strings(iRule)
  116. for _, v := range rule {
  117. _, err = enforcer.AddPolicy(fmt.Sprintf("g_%d", roleId), fmt.Sprintf("r_%s", v), "All")
  118. if err != nil {
  119. return
  120. }
  121. }
  122. return
  123. }
  124. //删除角色权限操作
  125. func DeleteRoleRule(roleId int) (err error) {
  126. return role.DeleteRoleRule(roleId)
  127. }
  128. //添加管理员操作
  129. func AddUser(data map[string]interface{}) (InsertId int64, err error) {
  130. //密码加密
  131. data["user_password"] = utils.EncryptCBC(gconv.String(data["user_password"]), utils.AdminCbcPublicKey)
  132. return user.Add(data)
  133. }
  134. //修改用户信息
  135. func EditUser(data map[string]interface{}) (err error) {
  136. //提交了密码?密码加密
  137. if val, ok := data["user_password"]; ok && gconv.String(val) != "" {
  138. data["user_password"] = utils.EncryptCBC(gconv.String(data["user_password"]), utils.AdminCbcPublicKey)
  139. } else {
  140. delete(data, "user_password")
  141. }
  142. return user.Edit(data)
  143. }
  144. //添加用户角色信息
  145. func AddUserRole(roleIds interface{}, userId int64) (err error) {
  146. enforcer, e := casbin_adapter_service.GetEnforcer()
  147. if e != nil {
  148. err = e
  149. return
  150. }
  151. rule := gconv.Ints(roleIds)
  152. for _, v := range rule {
  153. _, err = enforcer.AddGroupingPolicy(fmt.Sprintf("u_%d", userId), fmt.Sprintf("g_%d", v))
  154. if err != nil {
  155. return
  156. }
  157. }
  158. return
  159. }
  160. //修改用户角色信息
  161. func EditUserRole(roleIds interface{}, userId int) (err error) {
  162. enforcer, e := casbin_adapter_service.GetEnforcer()
  163. if e != nil {
  164. err = e
  165. return
  166. }
  167. rule := gconv.Ints(roleIds)
  168. //删除用户旧角色信息
  169. enforcer.RemoveFilteredGroupingPolicy(0, fmt.Sprintf("u_%d", userId))
  170. for _, v := range rule {
  171. _, err = enforcer.AddGroupingPolicy(fmt.Sprintf("u_%d", userId), fmt.Sprintf("g_%d", v))
  172. if err != nil {
  173. return
  174. }
  175. }
  176. return
  177. }
  178. func DeleteRoleByIds(ids []int) (err error) {
  179. return role.DeleteByIds(ids)
  180. }
  181. //删除菜单
  182. func DeleteMenuByIds(ids []int) (err error) {
  183. return auth_rule.DeleteByIds(ids)
  184. }