role.go 17 KB

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