auth_rule.go 6.3 KB

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