erp11--用户权限管理

一、原理:

用户-----角色-----菜单

每个用户对应多个角色,每个角色又对应多个菜单,可以从用户的id就可以知道要显示哪些菜单在页面了

1、角色菜单设置:

前端:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>角色权限设置</title>
  6. <link rel="stylesheet" type="text/css" href="ui/themes/default/easyui.css">
  7. <link rel="stylesheet" type="text/css" href="ui/themes/icon.css">
  8. <script type="text/javascript" src="ui/jquery.min.js"></script>
  9. <script type="text/javascript" src="ui/jquery.easyui.min.js"></script>
  10. <script type="text/javascript" src="ui/locale/easyui-lang-zh_CN.js"></script>
  11. <script type="text/javascript" src="ui/jquery.serializejson.min.js"></script>
  12. <script type="text/javascript">
  13. var selectId=1;//选择角色ID
  14. $(function(){
  15. $(‘#tree‘).tree({
  16. url:‘role_readRoleMenus.action?id=1‘,
  17. animate:true,
  18. checkbox:true
  19. });
  20. $("#saveBtn").bind("click",function(){
  21. var nodes=$("#tree").tree("getChecked");
  22. var nodesStr="";
  23. for(var i=0;i<nodes.length;i++){
  24. if(i==nodes.length-1){
  25. nodesStr+=nodes[i].id;
  26. }else{
  27. nodesStr+=nodes[i].id+",";
  28. }
  29. }
  30. $.ajax({
  31. url:‘role_updateRoleMenu.action‘,
  32. type:"post",
  33. data:{"id":selectId,"nodesStr":nodesStr},
  34. dataType:‘json‘,
  35. success:function(data){
  36. $.messager.alert("提示",data.message);
  37. }
  38. })
  39. })
  40. })
  41. var onclick=function(rowIndex,rowData){
  42. selectId=rowData.uuid;
  43. $("#tree").tree({
  44. url:‘role_readRoleMenus.action?id=‘+selectId,
  45. animate:true,
  46. checkbox:true
  47. });
  48. }
  49. </script>
  50. </head>
  51. <body class="easyui-layout">
  52. <div data-options="region:‘west‘,title:‘角色选择‘,split:true" style="width:500px;">
  53. <table class="easyui-datagrid" style="width:500px;height:650px"
  54. data-options="url:‘role_list‘,fitColumns:true,singleSelect:true,onClickRow:onclick">
  55. <thead>
  56. <tr>
  57. <th data-options="field:‘uuid‘,width:100">编号</th>
  58. <th data-options="field:‘name‘,width:100">角色名称</th>
  59. </tr>
  60. </thead>
  61. </table>
  62. </div>
  63. <div data-options="region:‘center‘,title:‘权限选择‘" style="padding:5px;background:#eee;">
  64. <ul id="tree"></ul>
  65. <button id="saveBtn" >保存</button>
  66. </div>
  67. </body>
  68. </html>

action:

  1. List<Tree> list = roleBiz.readRoleMenus(getId());
  2. write(JSON.toJSONString(list,true));
  3. }
  4. public void updateRoleMenu(){
  5. try {
  6. roleBiz.updateRoleMenu(getId(),nodesStr);
  7. write(ajaxReturn(true, "设置成功"));
  8. } catch (Exception e) {
  9. e.printStackTrace();
  10. write(ajaxReturn(false, "设置失败"));
  11. }
  12. }

biz:

  1. /**
  2. * 根据角色显示菜单树形数据
  3. */
  4. public List<Tree> readRoleMenus(Long id){
  5. Role role = roleDao.get(id);
  6. // 获取此角色下的所有菜单
  7. List<Menu> menus = role.getMenus();
  8. // 组装一个List<Tree>]
  9. List<Tree> trees = new ArrayList<Tree>();
  10. // 获取所有的菜单数据
  11. Menu menu = menuDao.get("0"); //菜单的根节点
  12. for(Menu menu1:menu.getMenus() ){ //一级菜单数据
  13. Tree tree1 = new Tree();
  14. tree1.setId(menu1.getMenuid());
  15. tree1.setText(menu1.getMenuname());
  16. for(Menu menu2:menu1.getMenus()){//二级菜单数据
  17. Tree tree2 = new Tree();
  18. tree2.setId(menu2.getMenuid());
  19. // 当前角色有此权限菜单时需要勾选
  20. if(menus.contains(menu2)){
  21. tree2.setChecked(true);
  22. }
  23. tree2.setText(menu2.getMenuname());
  24. tree1.getChildren().add(tree2); //注意:在Tree 中的getChildren方法中做了非空判断
  25. }
  26. trees.add(tree1);
  27. }
  28. return trees;
  29. }
  30. /**
  31. * 设置角色权限
  32. */
  33. public void updateRoleMenu(Long id, String nodesStr) {
  34. // 把传过来的数据保存到role_menu表中
  35. // 1、获取角色
  36. Role role = roleDao.get(id);
  37. // 2、原来角色下的菜单数据清空
  38. role.setMenus(new ArrayList<Menu>());
  39. // 3、重新把角色权限数据保存
  40. String[] nodes = nodesStr.split(",");
  41. for (String string : nodes) {
  42. Menu menu = menuDao.get(string);
  43. role.getMenus().add(menu);
  44. }
  45. }

2、用户角色控制:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>用户角色设置</title>
  6. <link rel="stylesheet" type="text/css" href="ui/themes/default/easyui.css">
  7. <link rel="stylesheet" type="text/css" href="ui/themes/icon.css">
  8. <script type="text/javascript" src="ui/jquery.min.js"></script>
  9. <script type="text/javascript" src="ui/jquery.easyui.min.js"></script>
  10. <script type="text/javascript" src="ui/locale/easyui-lang-zh_CN.js"></script>
  11. <script type="text/javascript" src="ui/jquery.serializejson.min.js"></script>
  12. <script type="text/javascript">
  13. var selectId=1;//选择角色ID
  14. $(function(){
  15. $(‘#tree‘).tree({
  16. url:‘emp_readEmpRoles.action?id=1‘,
  17. animate:true,
  18. checkbox:true
  19. });
  20. $("#saveBtn").bind("click",function(){
  21. var nodes=$("#tree").tree("getChecked");
  22. var nodesStr="";
  23. for(var i=0;i<nodes.length;i++){
  24. if(i==nodes.length-1){
  25. nodesStr+=nodes[i].id;
  26. }else{
  27. nodesStr+=nodes[i].id+",";
  28. }
  29. }
  30. $.ajax({
  31. url:‘emp_updateEmpRole.action‘,
  32. type:"post",
  33. data:{"id":selectId,"nodesStr":nodesStr},
  34. dataType:‘json‘,
  35. success:function(data){
  36. $.messager.alert("提示",data.message);
  37. }
  38. })
  39. })
  40. })
  41. var onclick=function(rowIndex,rowData){
  42. selectId=rowData.uuid;
  43. $("#tree").tree({
  44. url:‘emp_readEmpRoles.action?id=‘+selectId,
  45. animate:true,
  46. checkbox:true
  47. });
  48. }
  49. </script>
  50. </head>
  51. <body class="easyui-layout">
  52. <div data-options="region:‘west‘,title:‘用户选择‘,split:true" style="width:500px;">
  53. <table class="easyui-datagrid" style="width:500px;height:650px"
  54. data-options="url:‘emp_list‘,fitColumns:true,singleSelect:true,onClickRow:onclick">
  55. <thead>
  56. <tr>
  57. <th data-options="field:‘uuid‘,width:100">编号</th>
  58. <th data-options="field:‘name‘,width:100">用户名称</th>
  59. </tr>
  60. </thead>
  61. </table>
  62. </div>
  63. <div data-options="region:‘center‘,title:‘角色选择‘" style="padding:5px;background:#eee;">
  64. <ul id="tree"></ul>
  65. <button id="saveBtn" >保存</button>
  66. </div>
  67. </body>
  68. </html>

biz:

  1. @Override
  2. public List<Tree> readEmpRoles(Long id) {
  3. Emp emp = empDao.get(id);
  4. List<Role> roles = emp.getRoles();
  5. List<Tree> list1=new ArrayList<>();
  6. List<Role> list= roleDao.getList(null, null, null);
  7. for (Role role1 : list) {
  8. Tree tree1 = new Tree();
  9. tree1.setText(role1.getName());
  10. tree1.setId(role1.getUuid()+"");
  11. if (roles.contains(role1)) {
  12. tree1.setChecked(true);
  13. }
  14. list1.add(tree1);
  15. }
  16. return list1;
  17. }
  18. @Override
  19. public void updateEmpRole(Long id, String nodesStr) {
  20. String[] splits = nodesStr.split(",");
  21. Emp emp = empDao.get(id);
  22. emp.setRoles(new ArrayList<Role>());
  23. for (String roleuuid : splits) {
  24. Role role = roleDao.get(Long.parseLong(roleuuid));
  25. emp.getRoles().add(role);
  26. }
  27. }

3、登录用户的权限(菜单)显示:

biz:

  1. public Menu getMenuByEmpuuid(Long empuuid){
  2. List<Menu> list = menuDao.getMenuListByEmpuuid(empuuid);
  3. Menu menu = menuDao.get("0");
  4. List<Menu> removeList1 = new ArrayList<Menu>(); //需要删除的一级菜单
  5. List<Menu> removeList2 = null; //每个一级菜单中需要删除的二级菜单
  6. for(Menu menu1 : menu.getMenus()){
  7. removeList2 = new ArrayList<Menu>();
  8. for(Menu menu2 : menu1.getMenus()){ //二级菜单
  9. if(!list.contains(menu2)){
  10. removeList2.add(menu2);
  11. // menu1.getMenus().remove
  12. //把需要删除的先准备到一个list集合中
  13. }
  14. }
  15. menu1.getMenus().removeAll(removeList2); //把准备删除的数据 删除
  16. // 判断一级菜单下的二级菜单是否已经被全部删除
  17. if(menu1.getMenus().size()==0){
  18. //表示一级菜单下的二级菜单已经被全部删除,如果已经被全部删除了,一级菜单应该被删除
  19. // 把应该删除一级菜单数据放到removeList1集合中
  20. removeList1.add(menu1);
  21. }
  22. }
  23. menu.getMenus().removeAll(removeList1);
  24. return menu;
  25. }

dao:

  1. /**
  2. * 根据当前登录人获取菜单
  3. * @param empuuid
  4. * @return
  5. */
  6. public List<Menu> getMenuListByEmpuuid(Long empuuid){
  7. String hql=" select m from Emp e join e.roles r join r.menus m where e.uuid=?";
  8. return (List<Menu>) this.getHibernateTemplate().find(hql, empuuid);
  9. }

sql语句的多对多查询

  1. select distinct m.* from emp e,emp_role er ,role r,role_menu rm ,menu m
  2. where e.uuid=er.empuuid and er.roleuuid=r.uuid and r.uuid=rm.roleuuid and rm.menuuuid=m.menuid
  3. and e.uuid=2

对应的hibernate的多对多查询:

String hql="select m from Emp e join e.roles r join r.menus m where e.uuid=3 ";

知识点:

@JSONField(Serialize=false)    取消转json字符串时候的循环引用

null

时间: 2024-11-01 20:47:58

erp11--用户权限管理的相关文章

实现业务系统中的用户权限管理--实现篇

在设计篇中,我们已经为大家阐述了有关权限管理系统的数据库设计,在本篇中,我们将重点放在其实现代码部分.为了让你能够更直接更有效的看到全部动作的代码,我们使用"动作分解列表"的方式来陈述每个动作以及相关资源. 实现权限管理功能的动作 动作分解 动作名 相关表名 操作集类型 (S,U,I,D,SQL) 表单 模组 字符资源 是否分页? 返回提示? 权限检测 权限初始化安装 setup 无 无 无 setup setupok 否 否 否 显示添加管理组界面 addnewgroup 无 无 a

mysql用户权限管理

mysql数据在实际生产环境中大量被使用,那平时在做好服务器上防火墙策略以外平时,对mysql下的用户权限也要严格管理,mysql的用户权限都是放在mysql.user这张表里,平时的用户权限管理都是隐式使用着这张表的,先说下权限: 权限 意义 select 查询 insert 插入 update 更新 delete 删除记录,一般用于清空表或者某一条记录 create 创建 drop 删除,从表空间里删除 grant 授予,一般用于给用户授权 references 引用 index 索引 al

Linux用户权限管理(二)

今天继续讲下用户权限管理,上一章节讲述了用户和组的创建.修改和删除.这篇文章延续上篇文章,来讲述用户具体的权限管理. 首先我们来讲下权限的相关说明:权限分为读(r).写(w).执行(x).对于文件和目录,其权限对应的功能不尽相同. 文件权限: 读(r):查看文件类似cat的权限 写(w):对文件有编辑和删除权限. 执行(x):具有文件执行权限,可以将文件当作命令提交给内核运行 目录权限: 读(r):对目录下的文件只有ls查看权限(不能使用ls -l) 写(w):可以在目录下创建文件 执行(x):

linux 用户管理,用户权限管理,用户组管理

linux 用户管理,用户权限管理,用户组管理 一:ls -l 命令 解释 第个d表示是目录,如果是文件是-,如果是连接是l 第2到4个 rwx 表示创建者的操作权限 r 读,w 写,x 执行 第5到7个 rwx 表示该文件或目录对所属组操作权限, 依次的后面3个 r-x 表示该文件或目录对其他人的操作权限,这里是 r读,和 x 执行权限 权限后面的 数字2 表示当前目录或文件的连接数量: 数据后面的 名字,表示的是该文件或目录的所有者 依次后面的 名字,表示该文件或目录的所在组: 依次后面的

【转载】SQL Server 2005数据库用户权限管理的设置

SQL Server 2005数据库中,我们可以设置每个用户对应的权限,以提高数据库的安全性.这类用户权限设置的应用非常广泛.比如设置某个用户访问某个表的权限,甚至是CRUD的权限,更小粒度的还可以去到某几个字段的访问权限等等.其实这一设置过程是很简单的,接下来就让我们来一起学习吧. 一.操作步骤 1. 首先进入数据库级别的[安全性]-[登录名]-[新建登录名] (图1:新建登录名) 2. 在[常规]选项卡中,如下图所示,创建登陆名,并设置默认的数据库. (图2:设置选项) 3. 在[用户映射]

数据的备份与恢复与用户权限管理

一.数据的备份与恢复 将已有的数据复制一份,存放到其他的服务器上.MySQL提供的备份有很多,常见的有文本备份.数据备份.sql备份等 1.文本备份 文本备份是最简单的一种备份方式! 一般认为,文本备份只适合Myisam存储引擎的数据表,就是将数据表的三个文件(结构.数据.索引)备份到其他服务器就行了 文本备份的特点: 简单(只需要复制粘贴),每次都需要备份全部的文件,非常浪费磁盘空间 2.数据备份 1)备份语法 select *|字段列表 into outfile 文件地址 from 表名;

django 基于proxy实现用户权限管理

项目中经常会遇到用户权限管理的问题,django adminsite已经提供非常实用的用户权限管理机制.不过有些时候,我们希望根据相关用户属性来过滤adminsite中显示的内容.下文将结束如何实现: 原始类 假设我有这么一个问卷类,基于这个类可以实现增删改查的功能 class wenjuan(models.Model): """ 问卷 """ name=models.CharField(u'问卷名称',max_length=128) breif

RDIFramework.NET ━ 9.8 用户权限管理 ━ Web部分

RDIFramework.NET ━ .NET快速信息化系统开发框架 9.8 用户权限管理 -Web部分 在实际应用中我们会发现,权限控制会经常变动,如:需要调整角色的分配,需要收回与授予某些角色.用户可访问的模块(菜单)与相应的操作权限.需要给某些角色添加与移除相应的用户等等,如果没有一个灵活可靠的配置管理工具将会使权限控制变得十分麻烦.用户权限管理模块就是为了方便用户.角色权限的集中统一管理而开发的模块.在用户权限管理模块,操作员可以添加或移动用户到指定的角色.可以分配或授予指定用户的模块(

RBAC用户权限管理数据库设计

http://minjiechenjava.iteye.com/blog/1759482 RBAC用户权限管理数据库设计 博客分类: RBAC 权限设计 RBAC RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用户-角色-权限"的授权模型.在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系.(如下图) 角色是什么?可以理解为一定数

Oracle 用户权限管理方法

Oracle 用户权限管理方法 sys;//系统管理员,拥有最高权限 system;//本地管理员,次高权限 scott;//普通用户,密码默认为tiger,默认未解锁 sys;//系统管理员,拥有最高权限 system;//本地管理员,次高权限 scott;//普通用户,密码默认为tiger,默认未解锁 二.登陆 sqlplus / as sysdba;//登陆sys帐户 sqlplus sys as sysdba;//同上 sqlplus scott/tiger;//登陆普通用户scott