role.go 13 KB

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