role.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418
  1. package casbin
  2. import (
  3. "dashoo.cn/backend/api/business/role"
  4. "strconv"
  5. "strings"
  6. . "dashoo.cn/backend/api/controllers"
  7. "dashoo.cn/business2/district"
  8. "dashoo.cn/business2/module"
  9. "dashoo.cn/business2/organize"
  10. "dashoo.cn/business2/permission"
  11. "dashoo.cn/business2/userRole"
  12. "dashoo.cn/utils"
  13. "github.com/astaxie/beego"
  14. )
  15. type RoleController struct {
  16. BaseController
  17. }
  18. type RolePowerAjaxModel struct {
  19. Module []module.ModuleSimplify
  20. Selectemodule []module.ModuleSimplify
  21. }
  22. type RolePerAjaxModel struct {
  23. Operation []permission.Base_Permissionstrtree
  24. Selecteoperation []permission.Base_Permissionstrtree
  25. }
  26. type OrganizeAjaxModel struct {
  27. Organize []organize.Base_Organizetree
  28. SelecteOrganize []organize.Base_Organizetree
  29. }
  30. type DistrictAjaxModel struct {
  31. District []district.Base_Districttree
  32. SelectedDistrict []district.Base_Districttree
  33. }
  34. // @Title 角色列表
  35. // @Description 获取角色列表
  36. // @Success 200 {object} controllers.Request
  37. // @router /list [get]
  38. func (this *RoleController) RoleList() {
  39. svc := role.GetRoleService(utils.DBE)
  40. var roles []userRole.Base_Role
  41. page := this.GetPageInfoForm()
  42. searchkey := this.GetString("keyword")
  43. where := "IsVisible=1"
  44. if searchkey != "" {
  45. where = where + " and Realname like '%" + searchkey + "%'"
  46. }
  47. total := svc.GetRoleList(page.CurrentPage, page.Size, "CreateOn", utils.ToStr(this.User.Id), &roles, where)
  48. var datainfo DataInfo
  49. datainfo.Items = roles
  50. datainfo.CurrentItemCount = total
  51. this.Data["json"] = &datainfo
  52. this.ServeJSON()
  53. }
  54. // @Title 权限
  55. // @Description 获取菜单操作权限
  56. // @Success 200 {object} controllers.Request
  57. // @router /getpower [get]
  58. func (this *RoleController) GetRolePowerAjax() {
  59. id := this.GetString("id")
  60. svc := permission.GetPermissionService(utils.DBE)
  61. currentuser := this.User
  62. userid := utils.ToStr(currentuser.Id)
  63. ztreecurrentusernodesmodu := svc.GetModuleAll(userid, "30")
  64. ztreeselectedusernodesmodu := svc.GetModuleTreeAllByRole(id, "30")
  65. rest := RolePowerAjaxModel{ztreecurrentusernodesmodu, ztreeselectedusernodesmodu}
  66. this.Data["json"] = &rest
  67. this.ServeJSON()
  68. }
  69. // @Title 获得部门
  70. // @Description 获得部门
  71. // @Success 200 {object} controllers.Request
  72. // @router /getdepartment [get]
  73. func (this *RoleController) DepartmentListGet() {
  74. id := this.GetString("id") //roleid
  75. svc := permission.GetPermissionService(utils.DBE)
  76. currentuser := this.User
  77. userid := utils.ToStr(currentuser.Id)
  78. organizemodu := svc.GetOrganizeTree(userid)
  79. organizeselectedmodu := svc.GetOrganizeTreeByRole(id)
  80. rest := OrganizeAjaxModel{organizemodu, organizeselectedmodu}
  81. this.Data["json"] = &rest
  82. this.ServeJSON()
  83. }
  84. // @Title 获得区域
  85. // @Description 获得区域
  86. // @Success 200 {object} controllers.Request
  87. // @router /getdistrict [get]
  88. func (this *RoleController) DistrictListGet() {
  89. id := this.GetString("id") //roleid
  90. svc := permission.GetPermissionService(utils.DBE)
  91. currentuser := this.User
  92. userid := utils.ToStr(currentuser.Id)
  93. districtmodu := svc.GetDistrictTree(userid)
  94. districtselectedmodu := svc.GetDistrictTreeByRole(id)
  95. rest := DistrictAjaxModel{districtmodu, districtselectedmodu}
  96. this.Data["json"] = &rest
  97. this.ServeJSON()
  98. }
  99. // @Title 保存操作权限
  100. // @Description 保存权限
  101. // @Success 200 {object} controllers.Request
  102. // @router /saveOperationPower [put]
  103. func (this *RoleController) RoleOperationPowerPost() {
  104. //svc := permission.GetPermissionService(utils.DBE)
  105. roleid := this.GetString("id")
  106. var errinfo ErrorInfo
  107. if roleid == "" {
  108. errinfo.Message = utils.AlertProcess("操作失败!请求信息不完整!")
  109. errinfo.Code = -2
  110. this.Data["json"] = &errinfo
  111. this.ServeJSON()
  112. return
  113. }
  114. //utils.RBAC.DeletePermissionsForUser("rid_" + roleid) //撤销角色的操作访问权限
  115. operationids := strings.Split(this.GetString("operids"), ",")
  116. if this.GetString("operids") != "" {
  117. for i := 0; i < len(operationids); i++ {
  118. if strings.HasPrefix(operationids[i], "self_") {
  119. _operationid := []byte(operationids[i])[5:]
  120. operationid, _ := utils.StrTo(_operationid).Int()
  121. //err := svc.GrantRoleRolePermission(roleid, roleid, operationid, userRole.Base_User{Id: uid, Realname: this.User.Realname})
  122. ret := utils.RBAC.AddPermissionForUser("rid_"+roleid, "pid_"+strconv.Itoa(operationid))
  123. if ret == false {
  124. beego.Debug("insert error:", ret)
  125. continue
  126. }
  127. } else {
  128. operationid, _ := utils.StrTo(operationids[i]).Int()
  129. ret := utils.RBAC.AddPermissionForUser("rid_"+roleid, "pid_"+strconv.Itoa(operationid))
  130. if ret == false {
  131. beego.Debug("insert error:", ret)
  132. continue
  133. }
  134. }
  135. }
  136. }
  137. errinfo.Message = utils.AlertProcess("权限保存成功!")
  138. errinfo.Code = 0
  139. this.Data["json"] = &errinfo
  140. this.ServeJSON()
  141. }
  142. // @Title 保存资源权限 ---部门
  143. // @Description 保存权限
  144. // @Success 200 {object} controllers.Request
  145. // @router /savedepartmentmessageview [put]
  146. func (this *RoleController) OrganizePost() {
  147. roleid := this.GetString("id")
  148. var errinfo ErrorInfo
  149. if roleid == "" {
  150. errinfo.Message = utils.AlertProcess("操作失败!请求信息不完整!")
  151. errinfo.Code = -2
  152. this.Data["json"] = &errinfo
  153. this.ServeJSON()
  154. return
  155. }
  156. organizeids := strings.Split(this.GetString("organizeids"), ",")
  157. if this.GetString("organizeids") != "" {
  158. for i := 0; i < len(organizeids); i++ {
  159. if strings.HasPrefix(organizeids[i], "self_") {
  160. _organizeids := []byte(organizeids[i])[5:]
  161. organizeids, _ := utils.StrTo(_organizeids).Int()
  162. ret := utils.RBAC.AddPermissionForUser("rid_"+roleid, "oid_"+strconv.Itoa(organizeids))
  163. if ret == false {
  164. beego.Debug("insert error:", ret)
  165. continue
  166. }
  167. } else {
  168. organizeids, _ := utils.StrTo(organizeids[i]).Int()
  169. ret := utils.RBAC.AddPermissionForUser("rid_"+roleid, "oid_"+strconv.Itoa(organizeids))
  170. if ret == false {
  171. beego.Debug("insert error:", ret)
  172. continue
  173. }
  174. }
  175. }
  176. }
  177. errinfo.Message = utils.AlertProcess("权限保存成功!")
  178. errinfo.Code = 0
  179. this.Data["json"] = &errinfo
  180. this.ServeJSON()
  181. }
  182. // @Title 保存资源权限 ---区域
  183. // @Description 保存权限
  184. // @Success 200 {object} controllers.Request
  185. // @router /savedistrict [put]
  186. func (this *RoleController) DistrictPost() {
  187. roleid := this.GetString("id")
  188. var errinfo ErrorInfo
  189. if roleid == "" {
  190. errinfo.Message = utils.AlertProcess("操作失败!请求信息不完整!")
  191. errinfo.Code = -2
  192. this.Data["json"] = &errinfo
  193. this.ServeJSON()
  194. return
  195. }
  196. districtids := strings.Split(this.GetString("districtids"), ",")
  197. if this.GetString("districtids") != "" {
  198. for i := 0; i < len(districtids); i++ {
  199. if strings.HasPrefix(districtids[i], "self_") {
  200. _districtids := []byte(districtids[i])[5:]
  201. districtids, _ := utils.StrTo(_districtids).Int()
  202. ret := utils.RBAC.AddPermissionForUser("rid_"+roleid, "did_"+strconv.Itoa(districtids))
  203. if ret == false {
  204. beego.Debug("insert error:", ret)
  205. continue
  206. }
  207. } else {
  208. districtids, _ := utils.StrTo(districtids[i]).Int()
  209. ret := utils.RBAC.AddPermissionForUser("rid_"+roleid, "did_"+strconv.Itoa(districtids))
  210. if ret == false {
  211. beego.Debug("insert error:", ret)
  212. continue
  213. }
  214. }
  215. }
  216. }
  217. errinfo.Message = utils.AlertProcess("权限保存成功!")
  218. errinfo.Code = 0
  219. this.Data["json"] = &errinfo
  220. this.ServeJSON()
  221. }
  222. // @Title 权限
  223. // @Description 获取角色操作权限列表
  224. // @Success 200 {object} controllers.Request
  225. // @router /getItemPower [get]
  226. func (this *RoleController) GetRoleItemPowerAjax() {
  227. id := this.GetString("id")
  228. svc := permission.GetPermissionService(utils.DBE)
  229. currentuser := this.User
  230. userid := utils.ToStr(currentuser.Id)
  231. ztreecurrentusernodesope := svc.GetPermissionItemsByUserV2(userid, "0")
  232. ztreeselectedusernodesope := svc.GetPermissionItemsByRoleV2(id, "0")
  233. rest := RolePerAjaxModel{ztreecurrentusernodesope, ztreeselectedusernodesope}
  234. this.Data["json"] = &rest
  235. this.ServeJSON()
  236. }
  237. // @Title 保存权限
  238. // @Description 保存权限--菜单权限
  239. // @Success 200 {object} controllers.Request
  240. // @router /savepower [put]
  241. func (this *RoleController) RolePowerPost() {
  242. //svc := casbin.GetPermissionService(utils.DBE)
  243. roleid := this.GetString("id")
  244. var errinfo ErrorInfo
  245. if roleid == "" {
  246. errinfo.Message = utils.AlertProcess("操作失败!请求信息不完整!")
  247. errinfo.Code = -2
  248. this.Data["json"] = &errinfo
  249. this.ServeJSON()
  250. }
  251. //svc.RevokeRolePermission(roleid) //撤销角色的操作权限
  252. //svc.RevokeRoleModulePermission(roleid) //撤销角色的模块访问权限
  253. // operationids := strings.Split(this.GetString("operids"), ",")
  254. moduleids := strings.Split(this.GetString("moduleids"), ",")
  255. //uid, _ := utils.StrTo(this.User.Id).Int()
  256. // if this.GetString("operids") != "" {
  257. // for i := 0; i < len(operationids); i++ {
  258. // operationid, _ := utils.StrTo(operationids[i]).Int()
  259. // svc.GrantRolePermission(roleid, operationid, userRole.Base_User{Id: uid, Realname: this.User.Realname})
  260. // }
  261. // }
  262. if this.GetString("moduleids") != "" {
  263. for j := 0; j < len(moduleids); j++ {
  264. moduleid := utils.ToStr(moduleids[j])
  265. utils.RBAC.AddPermissionForUser("rid_"+roleid, "mid_"+moduleid)
  266. //svc.GrantRoleModulePermission(roleid, moduleid, userRole.Base_User{Id: uid, Realname: this.User.Realname})
  267. }
  268. }
  269. errinfo.Message = utils.AlertProcess("权限保存成功!")
  270. errinfo.Code = 0
  271. this.Data["json"] = &errinfo
  272. this.ServeJSON()
  273. }
  274. // @Title 权限
  275. // @Description 获取角色操作列表
  276. // @Success 200 {object} controllers.Request
  277. // @router /getusersforrole/:rid [get]
  278. func (this *RoleController) GetUsersForRole() {
  279. page := this.GetPageInfoForm()
  280. keyword := this.GetString("keyword")
  281. roleid := this.Ctx.Input.Param(":rid")
  282. svc := permission.GetPermissionService(utils.DBE)
  283. var users []userRole.Base_User
  284. where := "IsVisible=1"
  285. if keyword != "" {
  286. where = where + " and Realname like '%" + keyword + "%'"
  287. }
  288. total, users := svc.GetUserListForRole(page.CurrentPage, page.Size, roleid, "Id", where)
  289. var datainfo DataInfo
  290. datainfo.Items = users
  291. datainfo.CurrentItemCount = total
  292. this.Data["json"] = &datainfo
  293. this.ServeJSON()
  294. }
  295. // @Title 用户角色设置
  296. // @Description 用户角色设置
  297. // @Success 200 {object} controllers.Request
  298. // @router /setuserrole/:id [put]
  299. func (this *RoleController) UserRoleAddUser() {
  300. inputstr := this.Ctx.Input.Param(":id")
  301. serial := strings.Split(inputstr, "_")
  302. userids := strings.Split(serial[0], ",")
  303. var errinfo ErrorInfo
  304. roleid := serial[1]
  305. var err error = nil
  306. for i := 0; i < len(userids); i++ {
  307. if userids[i] != "0" && userids[i] != "" {
  308. //err = svc.AddUserToRole(userid, roleids[i], entity[0])
  309. utils.RBAC.DeleteRolesForUser("uid_" + userids[i])
  310. utils.RBAC.AddRoleForUser("uid_"+userids[i], "rid_"+roleid)
  311. }
  312. }
  313. if err == nil {
  314. errinfo.Message = utils.AlertProcess("用户角色调整成功!")
  315. errinfo.Code = 0
  316. this.Data["json"] = &errinfo
  317. this.ServeJSON()
  318. } else {
  319. errinfo.Message = utils.AlertProcess("用户角色调整失败!" + err.Error())
  320. errinfo.Code = -1
  321. this.Data["json"] = &errinfo
  322. this.ServeJSON()
  323. }
  324. }
  325. // @Description 删除用户
  326. // @Success 200 {object} controllers.Request
  327. // @router /deleteuser/:id [delete]
  328. func (this *RoleController) UserDelete() {
  329. inputstr := this.Ctx.Input.Param(":id")
  330. serial := strings.Split(inputstr, "_")
  331. id := serial[0]
  332. roleid := serial[1]
  333. utils.RBAC.DeleteRoleForUser("uid_"+id, "rid_"+roleid)
  334. var errinfo ErrorInfo
  335. var err error = nil
  336. if err == nil {
  337. errinfo.Message = utils.AlertProcess("删除用户成功!")
  338. errinfo.Code = 0
  339. this.Data["json"] = &errinfo
  340. this.ServeJSON()
  341. } else {
  342. errinfo.Message = utils.AlertProcess("删除用户失败!" + err.Error())
  343. errinfo.Code = -1
  344. this.Data["json"] = &errinfo
  345. this.ServeJSON()
  346. }
  347. }
  348. // @Description 删除所有用户
  349. // @Success 200 {object} controllers.Request
  350. // @router /deletealluser/:id [delete]
  351. func (this *RoleController) DeleteUserAll() {
  352. roleid := this.Ctx.Input.Param(":id")
  353. svc := permission.GetPermissionService(utils.DBE)
  354. var users []userRole.Base_User
  355. where := "IsVisible=1"
  356. _, users = svc.GetUserListForRole(0, 0, roleid, "Id", where)
  357. for i := 0; i < len(users); i++ {
  358. utils.RBAC.DeleteRoleForUser("uid_"+utils.ToStr(users[i].Id), "rid_"+roleid)
  359. }
  360. var errinfo ErrorInfo
  361. var err error = nil
  362. if err == nil {
  363. errinfo.Message = utils.AlertProcess("删除用户成功!")
  364. errinfo.Code = 0
  365. this.Data["json"] = &errinfo
  366. this.ServeJSON()
  367. } else {
  368. errinfo.Message = utils.AlertProcess("删除用户失败!" + err.Error())
  369. errinfo.Code = -1
  370. this.Data["json"] = &errinfo
  371. this.ServeJSON()
  372. }
  373. }
  374. //@Description 删除角色
  375. //@Success 200 {object} controllers.Request
  376. //@router /deleterole/:id [delete]
  377. func (this *RoleController) DeleteRole() {
  378. roleid := this.Ctx.Input.Param(":id")
  379. utils.RBAC.DeleteRole("rid_" + roleid)
  380. var errinfo ErrorInfo
  381. var err error = nil
  382. if err == nil {
  383. errinfo.Message = utils.AlertProcess("删除角色成功!")
  384. errinfo.Code = 0
  385. this.Data["json"] = &errinfo
  386. this.ServeJSON()
  387. } else {
  388. errinfo.Message = utils.AlertProcess("删除角色失败!" + err.Error())
  389. errinfo.Code = -1
  390. this.Data["json"] = &errinfo
  391. this.ServeJSON()
  392. }
  393. }