RoleController.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393
  1. package com.zhcs.dt.controller.system.role;
  2. import java.io.PrintWriter;
  3. import java.math.BigInteger;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import javax.annotation.Resource;
  8. import net.sf.json.JSONArray;
  9. import org.springframework.stereotype.Controller;
  10. import org.springframework.ui.Model;
  11. import org.springframework.web.bind.annotation.RequestMapping;
  12. import org.springframework.web.bind.annotation.RequestMethod;
  13. import org.springframework.web.bind.annotation.RequestParam;
  14. import org.springframework.web.bind.annotation.ResponseBody;
  15. import org.springframework.web.servlet.ModelAndView;
  16. import com.zhcs.dt.controller.base.BaseController;
  17. import com.zhcs.dt.entity.Page;
  18. import com.zhcs.dt.entity.system.Menu;
  19. import com.zhcs.dt.entity.system.Role;
  20. import com.zhcs.dt.service.system.appuser.AppuserManager;
  21. import com.zhcs.dt.service.system.fhlog.FHlogManager;
  22. import com.zhcs.dt.service.system.menu.MenuManager;
  23. import com.zhcs.dt.service.system.role.RoleManager;
  24. import com.zhcs.dt.service.system.user.UserManager;
  25. import com.zhcs.dt.util.AppUtil;
  26. import com.zhcs.dt.util.DateUtil;
  27. import com.zhcs.dt.util.Jurisdiction;
  28. import com.zhcs.dt.util.PageData;
  29. import com.zhcs.dt.util.RightsHelper;
  30. import com.zhcs.dt.util.Tools;
  31. /**
  32. * 类名称:RoleController 角色权限管理
  33. * 创建人:FH Q313596790
  34. * 修改时间:2015年11月6日
  35. * @version
  36. */
  37. @Controller
  38. @RequestMapping(value="/role")
  39. public class RoleController extends BaseController {
  40. String menuUrl = "role.do"; //菜单地址(权限用)
  41. @Resource(name="menuService")
  42. private MenuManager menuService;
  43. @Resource(name="roleService")
  44. private RoleManager roleService;
  45. @Resource(name="userService")
  46. private UserManager userService;
  47. @Resource(name="appuserService")
  48. private AppuserManager appuserService;
  49. @Resource(name="fhlogService")
  50. private FHlogManager FHLOG;
  51. /** 进入权限首页
  52. * @param
  53. * @return
  54. * @throws Exception
  55. */
  56. @RequestMapping
  57. public ModelAndView list()throws Exception{
  58. ModelAndView mv = this.getModelAndView();
  59. PageData pd = new PageData();
  60. try{
  61. pd = this.getPageData();
  62. if(pd.getString("ROLE_ID") == null || "".equals(pd.getString("ROLE_ID").trim())){
  63. pd.put("ROLE_ID", "1"); //默认列出第一组角色(初始设计系统用户和会员组不能删除)
  64. }
  65. PageData fpd = new PageData();
  66. fpd.put("ROLE_ID", "0");
  67. List<Role> roleList = roleService.listAllRolesByPId(fpd); //列出组(页面横向排列的一级组)
  68. List<Role> roleList_z = roleService.listAllRolesByPId(pd); //列出此组下架角色
  69. pd = roleService.findObjectById(pd); //取得点击的角色组(横排的)
  70. mv.addObject("pd", pd);
  71. mv.addObject("roleList", roleList);
  72. mv.addObject("roleList_z", roleList_z);
  73. mv.addObject("QX",Jurisdiction.getHC()); //按钮权限
  74. mv.setViewName("system/role/role_list");
  75. } catch(Exception e){
  76. logger.error(e.toString(), e);
  77. }
  78. return mv;
  79. }
  80. /**去新增页面
  81. * @param
  82. * @return
  83. */
  84. @RequestMapping(value="/toAdd")
  85. public ModelAndView toAdd(){
  86. ModelAndView mv = this.getModelAndView();
  87. PageData pd = new PageData();
  88. try{
  89. pd = this.getPageData();
  90. mv.addObject("msg", "add");
  91. mv.setViewName("system/role/role_edit");
  92. mv.addObject("pd", pd);
  93. } catch(Exception e){
  94. logger.error(e.toString(), e);
  95. }
  96. return mv;
  97. }
  98. /**保存新增角色
  99. * @return
  100. * @throws Exception
  101. */
  102. @RequestMapping(value="/add",method=RequestMethod.POST)
  103. public ModelAndView add()throws Exception{
  104. if(!Jurisdiction.buttonJurisdiction(menuUrl, "add")){return null;} //校验权限
  105. logBefore(logger, Jurisdiction.getUsername()+"新增角色");
  106. ModelAndView mv = this.getModelAndView();
  107. PageData pd = new PageData();
  108. try{
  109. pd = this.getPageData();
  110. String parent_id = pd.getString("PARENT_ID"); //父类角色id
  111. pd.put("ROLE_ID", parent_id);
  112. if("0".equals(parent_id)){
  113. pd.put("RIGHTS", ""); //菜单权限
  114. }else{
  115. String rights = roleService.findObjectById(pd).getString("RIGHTS");
  116. pd.put("RIGHTS", (null == rights)?"":rights); //组菜单权限
  117. }
  118. String RNUMBER = "R"+DateUtil.getDays()+Tools.getRandomNum();
  119. pd.put("RNUMBER", RNUMBER); //编码
  120. pd.put("ROLE_ID", this.get32UUID()); //主键
  121. pd.put("ADD_QX", "0"); //初始新增权限为否
  122. pd.put("DEL_QX", "0"); //删除权限
  123. pd.put("EDIT_QX", "0"); //修改权限
  124. pd.put("CHA_QX", "0"); //查看权限
  125. roleService.add(pd);
  126. FHLOG.save(Jurisdiction.getUsername(), "新增角色:"+pd.getString("ROLE_NAME"));
  127. } catch(Exception e){
  128. logger.error(e.toString(), e);
  129. mv.addObject("msg","failed");
  130. }
  131. mv.setViewName("save_result");
  132. return mv;
  133. }
  134. /**请求编辑
  135. * @param ROLE_ID
  136. * @return
  137. * @throws Exception
  138. */
  139. @RequestMapping(value="/toEdit")
  140. public ModelAndView toEdit( String ROLE_ID )throws Exception{
  141. ModelAndView mv = this.getModelAndView();
  142. PageData pd = new PageData();
  143. try{
  144. pd = this.getPageData();
  145. pd.put("ROLE_ID", ROLE_ID);
  146. pd = roleService.findObjectById(pd);
  147. mv.addObject("msg", "edit");
  148. mv.addObject("pd", pd);
  149. mv.setViewName("system/role/role_edit");
  150. } catch(Exception e){
  151. logger.error(e.toString(), e);
  152. }
  153. return mv;
  154. }
  155. /**保存修改
  156. * @return
  157. * @throws Exception
  158. */
  159. @RequestMapping(value="/edit")
  160. public ModelAndView edit()throws Exception{
  161. if(!Jurisdiction.buttonJurisdiction(menuUrl, "edit")){return null;} //校验权限
  162. logBefore(logger, Jurisdiction.getUsername()+"修改角色");
  163. ModelAndView mv = this.getModelAndView();
  164. PageData pd = new PageData();
  165. try{
  166. pd = this.getPageData();
  167. roleService.edit(pd);
  168. FHLOG.save(Jurisdiction.getUsername(), "修改角色:"+pd.getString("ROLE_NAME"));
  169. mv.addObject("msg","success");
  170. } catch(Exception e){
  171. logger.error(e.toString(), e);
  172. mv.addObject("msg","failed");
  173. }
  174. mv.setViewName("save_result");
  175. return mv;
  176. }
  177. /**删除角色
  178. * @param ROLE_ID
  179. * @return
  180. * @throws Exception
  181. */
  182. @RequestMapping(value="/delete")
  183. @ResponseBody
  184. public Object deleteRole(@RequestParam String ROLE_ID)throws Exception{
  185. if(!Jurisdiction.buttonJurisdiction(menuUrl, "del")){return null;} //校验权限
  186. logBefore(logger, Jurisdiction.getUsername()+"删除角色");
  187. Map<String,String> map = new HashMap<String,String>();
  188. PageData pd = new PageData();
  189. String errInfo = "";
  190. try{
  191. pd.put("ROLE_ID", ROLE_ID);
  192. List<Role> roleList_z = roleService.listAllRolesByPId(pd); //列出此部门的所有下级
  193. if("fhadminzhuche".equals(ROLE_ID)|| roleList_z.size() > 0){
  194. errInfo = "false"; //下级有数据时or注册用户角色,删除失败
  195. }else{
  196. List<PageData> userlist = userService.listAllUserByRoldId(pd); //此角色下的用户
  197. List<PageData> appuserlist = appuserService.listAllAppuserByRorlid(pd); //此角色下的会员
  198. if(userlist.size() > 0 || appuserlist.size() > 0){ //此角色已被使用就不能删除
  199. errInfo = "false2";
  200. }else{
  201. roleService.deleteRoleById(ROLE_ID); //执行删除
  202. FHLOG.save(Jurisdiction.getUsername(), "删除角色ID为:"+ROLE_ID);
  203. errInfo = "success";
  204. }
  205. }
  206. } catch(Exception e){
  207. logger.error(e.toString(), e);
  208. }
  209. map.put("result", errInfo);
  210. return AppUtil.returnObject(new PageData(), map);
  211. }
  212. /**
  213. * 显示菜单列表ztree(菜单授权菜单)
  214. * @param model
  215. * @return
  216. */
  217. @RequestMapping(value="/menuqx")
  218. public ModelAndView listAllMenu(Model model,String ROLE_ID)throws Exception{
  219. ModelAndView mv = this.getModelAndView();
  220. try{
  221. Role role = roleService.getRoleById(ROLE_ID); //根据角色ID获取角色对象
  222. String roleRights = role.getRIGHTS(); //取出本角色菜单权限
  223. List<Menu> menuList = menuService.listAllMenuQx("0"); //获取所有菜单
  224. menuList = this.readMenu(menuList, roleRights); //根据角色权限处理菜单权限状态(递归处理)
  225. JSONArray arr = JSONArray.fromObject(menuList);
  226. String json = arr.toString();
  227. json = json.replaceAll("MENU_ID", "id").replaceAll("PARENT_ID", "pId").replaceAll("MENU_NAME", "name").replaceAll("subMenu", "nodes").replaceAll("hasMenu", "checked");
  228. model.addAttribute("zTreeNodes", json);
  229. System.out.print("json:" + json);
  230. mv.addObject("ROLE_ID",ROLE_ID);
  231. mv.setViewName("system/role/menuqx");
  232. } catch(Exception e){
  233. logger.error(e.toString(), e);
  234. }
  235. return mv;
  236. }
  237. /**保存角色菜单权限
  238. * @param ROLE_ID 角色ID
  239. * @param menuIds 菜单ID集合
  240. * @param out
  241. * @throws Exception
  242. */
  243. @RequestMapping(value="/saveMenuqx")
  244. public void saveMenuqx(@RequestParam String ROLE_ID,@RequestParam String menuIds,PrintWriter out)throws Exception{
  245. if(!Jurisdiction.buttonJurisdiction(menuUrl, "edit")){} //校验权限
  246. logBefore(logger, Jurisdiction.getUsername()+"修改菜单权限");
  247. FHLOG.save(Jurisdiction.getUsername(), "修改角色菜单权限,角色ID为:"+ROLE_ID);
  248. PageData pd = new PageData();
  249. try{
  250. if(null != menuIds && !"".equals(menuIds.trim())){
  251. BigInteger rights = RightsHelper.sumRights(Tools.str2StrArray(menuIds));//用菜单ID做权处理
  252. Role role = roleService.getRoleById(ROLE_ID); //通过id获取角色对象
  253. role.setRIGHTS(rights.toString());
  254. roleService.updateRoleRights(role); //更新当前角色菜单权限
  255. pd.put("rights",rights.toString());
  256. }else{
  257. Role role = new Role();
  258. role.setRIGHTS("");
  259. role.setROLE_ID(ROLE_ID);
  260. roleService.updateRoleRights(role); //更新当前角色菜单权限(没有任何勾选)
  261. pd.put("rights","");
  262. }
  263. pd.put("ROLE_ID", ROLE_ID);
  264. if(!"1".equals(ROLE_ID)){ //当修改admin权限时,不修改其它角色权限
  265. roleService.setAllRights(pd); //更新此角色所有子角色的菜单权限
  266. }
  267. out.write("success");
  268. out.close();
  269. } catch(Exception e){
  270. logger.error(e.toString(), e);
  271. }
  272. }
  273. /**请求角色按钮授权页面(增删改查)
  274. * @param ROLE_ID: 角色ID
  275. * @param msg: 区分增删改查
  276. * @param model
  277. * @return
  278. * @throws Exception
  279. */
  280. @RequestMapping(value="/b4Button")
  281. public ModelAndView b4Button(@RequestParam String ROLE_ID,@RequestParam String msg,Model model)throws Exception{
  282. ModelAndView mv = this.getModelAndView();
  283. try{
  284. List<Menu> menuList = menuService.listAllMenuQx("0"); //获取所有菜单
  285. Role role = roleService.getRoleById(ROLE_ID); //根据角色ID获取角色对象
  286. String roleRights = "";
  287. if("add_qx".equals(msg)){
  288. roleRights = role.getADD_QX(); //新增权限
  289. }else if("del_qx".equals(msg)){
  290. roleRights = role.getDEL_QX(); //删除权限
  291. }else if("edit_qx".equals(msg)){
  292. roleRights = role.getEDIT_QX(); //修改权限
  293. }else if("cha_qx".equals(msg)){
  294. roleRights = role.getCHA_QX(); //查看权限
  295. }
  296. menuList = this.readMenu(menuList, roleRights); //根据角色权限处理菜单权限状态(递归处理)
  297. JSONArray arr = JSONArray.fromObject(menuList);
  298. String json = arr.toString();
  299. json = json.replaceAll("MENU_ID", "id").replaceAll("PARENT_ID", "pId").replaceAll("MENU_NAME", "name").replaceAll("subMenu", "nodes").replaceAll("hasMenu", "checked");
  300. model.addAttribute("zTreeNodes", json);
  301. mv.addObject("ROLE_ID",ROLE_ID);
  302. mv.addObject("msg", msg);
  303. } catch(Exception e){
  304. logger.error(e.toString(), e);
  305. }
  306. mv.setViewName("system/role/b4Button");
  307. return mv;
  308. }
  309. /**根据角色权限处理权限状态(递归处理)
  310. * @param menuList:传入的总菜单
  311. * @param roleRights:加密的权限字符串
  312. * @return
  313. */
  314. public List<Menu> readMenu(List<Menu> menuList,String roleRights){
  315. for(int i=0;i<menuList.size();i++){
  316. menuList.get(i).setHasMenu(RightsHelper.testRights(roleRights, menuList.get(i).getMENU_ID()));
  317. this.readMenu(menuList.get(i).getSubMenu(), roleRights); //是:继续排查其子菜单
  318. }
  319. return menuList;
  320. }
  321. /**
  322. * 保存角色按钮权限
  323. */
  324. /**
  325. * @param ROLE_ID
  326. * @param menuIds
  327. * @param msg
  328. * @param out
  329. * @throws Exception
  330. */
  331. @RequestMapping(value="/saveB4Button")
  332. public void saveB4Button(@RequestParam String ROLE_ID,@RequestParam String menuIds,@RequestParam String msg,PrintWriter out)throws Exception{
  333. if(!Jurisdiction.buttonJurisdiction(menuUrl, "edit")){} //校验权限
  334. logBefore(logger, Jurisdiction.getUsername()+"修改"+msg+"权限");
  335. FHLOG.save(Jurisdiction.getUsername(), "修改"+msg+"权限,角色ID为:"+ROLE_ID);
  336. PageData pd = new PageData();
  337. pd = this.getPageData();
  338. try{
  339. if(null != menuIds && !"".equals(menuIds.trim())){
  340. BigInteger rights = RightsHelper.sumRights(Tools.str2StrArray(menuIds));
  341. pd.put("value",rights.toString());
  342. }else{
  343. pd.put("value","");
  344. }
  345. pd.put("ROLE_ID", ROLE_ID);
  346. roleService.saveB4Button(msg,pd);
  347. out.write("success");
  348. out.close();
  349. } catch(Exception e){
  350. logger.error(e.toString(), e);
  351. }
  352. }
  353. /** 选择角色(弹窗选择用)
  354. * @param
  355. * @return
  356. * @throws Exception
  357. */
  358. @RequestMapping(value="/roleListWindow")
  359. public ModelAndView roleListWindow(Page page)throws Exception{
  360. ModelAndView mv = this.getModelAndView();
  361. PageData pd = new PageData();
  362. pd = this.getPageData();
  363. String keywords = pd.getString("keywords"); //关键词检索条件
  364. if(null != keywords && !"".equals(keywords)){
  365. pd.put("keywords", keywords.trim());
  366. }
  367. page.setPd(pd);
  368. List<PageData> roleList = roleService.roleListWindow(page);//列出所有角色
  369. mv.addObject("pd", pd);
  370. mv.addObject("roleList", roleList);
  371. mv.setViewName("system/role/window_role_list");
  372. return mv;
  373. }
  374. }