auth_rule.go 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  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/model/admin/user_post"
  8. "gfast/app/service/casbin_adapter_service"
  9. "gfast/library/utils"
  10. "github.com/gogf/gf/database/gdb"
  11. "github.com/gogf/gf/errors/gerror"
  12. "github.com/gogf/gf/frame/g"
  13. "github.com/gogf/gf/text/gstr"
  14. "github.com/gogf/gf/util/gconv"
  15. )
  16. //获取MenuType==0,1菜单列表
  17. func GetIsMenuList() ([]*auth_rule.Entity, error) {
  18. list, err := GetMenuList()
  19. if err != nil {
  20. return nil, err
  21. }
  22. var gList = make([]*auth_rule.Entity, 0, len(list))
  23. for _, v := range list {
  24. if v.MenuType == 0 || v.MenuType == 1 {
  25. gList = append(gList, v)
  26. }
  27. }
  28. return gList, nil
  29. }
  30. //获取isMenu=1且status=1的菜单列表
  31. func GetIsMenuStatusList() ([]*auth_rule.Entity, error) {
  32. list, err := GetMenuList()
  33. if err != nil {
  34. return nil, err
  35. }
  36. var gList = make([]*auth_rule.Entity, 0, len(list))
  37. for _, v := range list {
  38. if (v.MenuType == 0 || v.MenuType == 1) && v.Status == 1 {
  39. gList = append(gList, v)
  40. }
  41. }
  42. return gList, nil
  43. }
  44. //获取status==1的菜单列表
  45. func GetMenuIsStatusList() ([]*auth_rule.Entity, error) {
  46. list, err := GetMenuList()
  47. if err != nil {
  48. return nil, err
  49. }
  50. var gList = make([]*auth_rule.Entity, 0, len(list))
  51. for _, v := range list {
  52. if v.Status == 1 {
  53. gList = append(gList, v)
  54. }
  55. }
  56. return gList, nil
  57. }
  58. //获取所有菜单
  59. func GetMenuList() (list []*auth_rule.Entity, err error) {
  60. return auth_rule.GetMenuList()
  61. }
  62. func GetMenuListSearch(req *auth_rule.ReqSearch) (list []*auth_rule.Entity, err error) {
  63. list, err = auth_rule.GetMenuList()
  64. if err != nil {
  65. return
  66. }
  67. if req != nil {
  68. tmpList := make([]*auth_rule.Entity, 0, len(list))
  69. for _, entity := range list {
  70. if (req.Title == "" || gstr.Contains(gstr.ToUpper(entity.Title), gstr.ToUpper(req.Title))) &&
  71. (req.Status == "" || gconv.Uint(req.Status) == entity.Status) {
  72. tmpList = append(tmpList, entity)
  73. }
  74. }
  75. list = tmpList
  76. }
  77. g.Log().Debug(list)
  78. return
  79. }
  80. //检查菜单规则是否存在
  81. func CheckMenuNameUnique(name string, id int) bool {
  82. return auth_rule.CheckMenuNameUnique(name, id)
  83. }
  84. //检查菜单路由地址是否已经存在
  85. func CheckMenuPathUnique(path string, id int) bool {
  86. return auth_rule.CheckMenuPathUnique(path, id)
  87. }
  88. // 添加菜单操作
  89. func AddMenu(req *auth_rule.MenuReq) (err error, insertId int64) {
  90. return auth_rule.Add(req)
  91. }
  92. //修改菜单操作
  93. func EditMenu(req *auth_rule.MenuReq, id int) (err error, rows int64) {
  94. return auth_rule.Edit(req, id)
  95. }
  96. //获取用户组(角色)列表
  97. func GetRoleList() (list []*role.Entity, err error) {
  98. return role.GetList()
  99. }
  100. func GetRoleListSearch(req *role.SelectPageReq) (total, page int, list []*role.Entity, err error) {
  101. return role.GetRoleListSearch(req)
  102. }
  103. //保存角色信息并返回插入的id
  104. func AddRole(tx *gdb.TX, data map[string]interface{}) (InsId int64, err error) {
  105. return role.Add(tx, data)
  106. }
  107. //添加角色授权规则
  108. func AddRoleRule(iRule interface{}, roleId int64) (err error) {
  109. enforcer, e := casbin_adapter_service.GetEnforcer()
  110. if e != nil {
  111. err = e
  112. return
  113. }
  114. rule := gconv.Strings(iRule)
  115. for _, v := range rule {
  116. _, err = enforcer.AddPolicy(fmt.Sprintf("g_%d", roleId), fmt.Sprintf("r_%s", v), "All")
  117. if err != nil {
  118. return
  119. }
  120. }
  121. return
  122. }
  123. //修改角色信息操作
  124. func EditRole(tx *gdb.TX, data map[string]interface{}) (err error) {
  125. return role.Edit(tx, data)
  126. }
  127. func StatusSetRole(req *role.StatusSetReq) error {
  128. return role.StatusSetRole(req)
  129. }
  130. func RoleDataScope(req *role.DataScopeReq) error {
  131. return role.DataScope(req)
  132. }
  133. //修改角色的授权规则
  134. func EditRoleRule(iRule interface{}, roleId int64) (err error) {
  135. enforcer, e := casbin_adapter_service.GetEnforcer()
  136. if e != nil {
  137. err = e
  138. return
  139. }
  140. //查询当前权限
  141. gp := enforcer.GetFilteredPolicy(0, fmt.Sprintf("g_%d", roleId))
  142. //删除旧权限
  143. for _, v := range gp {
  144. _, e = enforcer.RemovePolicy(v)
  145. if e != nil {
  146. err = e
  147. return
  148. }
  149. }
  150. rule := gconv.Strings(iRule)
  151. for _, v := range rule {
  152. _, err = enforcer.AddPolicy(fmt.Sprintf("g_%d", roleId), fmt.Sprintf("r_%s", v), "All")
  153. if err != nil {
  154. return
  155. }
  156. }
  157. return
  158. }
  159. //删除角色权限操作
  160. func DeleteRoleRule(roleId int) (err error) {
  161. return role.DeleteRoleRule(roleId)
  162. }
  163. //添加管理员操作
  164. func AddUser(req *user.AddUserReq) (InsertId int64, err error) {
  165. //密码加密
  166. req.Password = utils.EncryptCBC(gconv.String(req.Password), utils.AdminCbcPublicKey)
  167. return user.Add(req)
  168. }
  169. //修改用户信息
  170. func EditUser(req *user.EditUserReq) (err error) {
  171. return user.Edit(req)
  172. }
  173. //添加用户角色信息
  174. func AddUserRole(roleIds interface{}, userId int64) (err error) {
  175. enforcer, e := casbin_adapter_service.GetEnforcer()
  176. if e != nil {
  177. err = e
  178. return
  179. }
  180. rule := gconv.Ints(roleIds)
  181. for _, v := range rule {
  182. _, err = enforcer.AddGroupingPolicy(fmt.Sprintf("u_%d", userId), fmt.Sprintf("g_%d", v))
  183. if err != nil {
  184. return
  185. }
  186. }
  187. return
  188. }
  189. //添加用户岗位信息
  190. func AddUserPost(postIds []int64, userId int64) (err error) {
  191. //删除旧岗位信息
  192. err = user_post.DeleteByUserId(userId)
  193. if err != nil {
  194. g.Log().Error(err)
  195. err = gerror.New("设置用户岗位信息失败")
  196. }
  197. //添加用户岗位信息
  198. err = user_post.AddUserPost(postIds, userId)
  199. if err != nil {
  200. g.Log().Error(err)
  201. err = gerror.New("设置用户岗位信息失败")
  202. }
  203. return
  204. }
  205. //修改用户角色信息
  206. func EditUserRole(roleIds interface{}, userId int) (err error) {
  207. enforcer, e := casbin_adapter_service.GetEnforcer()
  208. if e != nil {
  209. err = e
  210. return
  211. }
  212. rule := gconv.Ints(roleIds)
  213. //删除用户旧角色信息
  214. enforcer.RemoveFilteredGroupingPolicy(0, fmt.Sprintf("u_%d", userId))
  215. for _, v := range rule {
  216. _, err = enforcer.AddGroupingPolicy(fmt.Sprintf("u_%d", userId), fmt.Sprintf("g_%d", v))
  217. if err != nil {
  218. return
  219. }
  220. }
  221. return
  222. }
  223. func DeleteRoleByIds(ids []int) (err error) {
  224. return role.DeleteByIds(ids)
  225. }
  226. //删除菜单
  227. func DeleteMenuByIds(ids []int) (err error) {
  228. return auth_rule.DeleteByIds(ids)
  229. }