宅急送项目的第九天笔记!( 角色--权限管理)

来源:互联网 发布:视频黄金交易软件讲解 编辑:程序博客网 时间:2024/05/07 18:21
项目进度 :
1、 用户管理 (设置密码、登陆、 用户增删改查)
2、 基础设置业务 (取派标准、取派员、区域表、分区表、定区排班)
3、 取派业务 (业务受理、工作单快速录入、工作单批量导入 ) ------------- 业务受理后(追单、销单)、人工调度(为业务指定取派员)

TODO : 中转业务(分拣 )

业务: 工作单产生(管理环节,经理角色对工作单进行审核) ------ 中转业务开始
业务流程(jbpm) 环节: 中转(从出发地 到目的地 线路信息 )、到达后进行入库、 取派员取货出库 、 客户签收 

====================================================================================
今天主要目标: 角色(权限)管理
权限管理 采用通用权限管理模型 

分析权限管理实现功能
1、 模块管理 : 增删改查   (包括: 名称、描述)
2、 在模块下创建对应功能点 (包括: 名称、描述、对应资源路径 指定多个路径以, 分隔)
3、 角色管理 (包括名称、描述) --- 授权功能 
4、 为用户授予角色 
5、 权限控制 : Filter过滤器、 Interceptor拦截器、 Spring AOP 
Filter 拦截 web访问url地址 
Interceptor 拦截:  拦截以.action结尾url、拦截Action的访问 
Spring AOP 拦截 : 只能拦截Spring管理Bean的访问 (业务层Service )


方案:拦截器 (所有需要被管理的JSP,第一天时,通过action访问)

一、 模块 功能管理 
页面 --- 系统管理 -- 功能管理 

模块列表查询 : module.jsp  ----- datagrid  ----- module_list.action  (将返回json 绑定到datagrid 里) --- Ajax 
模块添加 : module.jsp  ----- form 以Ajax方式提交数据 

二、 模块下添加具体功能点  (非Ajax方式 struts2标签方式 )
功能列表查询
module.jsp 双击模块信息 ---- 将模块id 发送到服务器端 ---- 根据模块id 查询 ---- 结果放入值栈 --- 跳转 function.jsp s:iterator 遍历显示

添加功能点 function.jsp --- function_add.jsp 隐藏域 模块id ------ FunctionAction  save方法 --- 跳转 module.jsp  

三、 角色管理 ,为角色授权 
1、 点击系统管理 --- 权限管理 (跳转role.jsp )
将admin.json
{ id:1003, pId:100, name:"权限管理", t:"",page:"page_admin_role.action"} 

${pageContext.request.contextPath}/role_list.action  ---- 
设计domain 、初始数据、设计Service 、Action 配置dao.xml service.xml struts.xml

多对多注解配置 
* 在两端都使用@ManyToMany 
* 在维护外键表那一端 添加 @JoinTable 
* 在不维护外键表那一端 mappedBy

class Role {
@ManyToMany(targetEntity=Function.class)
@JoinTable(joinColumns={@JoinColumn(name="role_id")},inverseJoinColumns={@JoinColumn(name="function_id")})
private Set<Function> functions = new HashSet<Function>();

class Function {
// 关联多个角色
@ManyToMany(targetEntity=Role.class,mappedBy="functions")
private Set<Role> roles = new HashSet<Role>();
}

完成角色查询和添加 

2、 授权 为角色指定具有功能权限  (勾选方式)
操作 roles_functions 角色功能关系表 ------- 关系建立 insert 、关系解除 delete 
*** 只需要用role关联function 

选中一个角色 , 根据角色id 查询具有权限, 查询所有权限 ------- privilege.jsp 权限回显
*** 右键菜单授权 
1) 
<div id="menu" class="easyui-menu" style="width:120px;">  
   <!-- 一个div就是一个菜单项 -->
   <div id="grantPrivilege">为角色授权</div>  
</div> 
2) datagrid 添加 onRowContextMenu 事件
onRowContextMenu : function(e, rowIndex, rowData){
   // 阻止默认事件
   e.preventDefault();  // 阻止原菜单
// e 事件
// rowIndex 行索引
// rowData 行数据
$('#menu').menu('show', {   
left: e.pageX,
           top: e.pageY 
}); 
}

3) 定义成员变量,roleid 记录右键点击数据行 id  ---- 点击为角色授权 
 根据角色id 查询已经具有权限 、查询所有权限  ---- privilege.jsp
 
关联一个对象 @LazyToOne  ----- <manytoone lazy="false">
关联Set @LazyCollection  ----- <set lazy="false" > 

四、 为用户指定角色 (用户角色是只有一个 )
***  在用户表中添加 一个角色表 外键    角色表 1 ----- * 用户

在User中添加了与Role ---- 多对一关联 
在userlist.jsp 创建数据右键 授予角色菜单 --------- 弹出window (Ajax提交用户选中的角色)

1、 查询所有角色 显示到下拉列表 
$.get("${pageContext.request.contextPath}/role_grantRoleList.action",function(data){
for(var i = 0 ; i < data.length; i++){
$option = $("<option value='"+data[i].id+"'>"+data[i].name+"</option>");
$("#role").append($option);
}
});
RoleAction   ------  grantRoleList 方法
2、 右键选中,弹出窗口 ,表单显示默认值 
// 设置默认值
$("#userinputid").val(rowData.id); // id存放隐藏域
$("#usernameTD").html(rowData.username);// 将username显示td中
3、 点击右键菜单 弹出window
    $("#grantWindow").window('open');

4、 提交授予角色
$("#grantrolebtn").click(function(){
$.post("${pageContext.request.contextPath}/grantUserRole.action", $("#grantForm").serialize(), function(data){
if(data=='success'){
// 窗口关闭
$("#grantWindow").window('close');
// 隐藏域还原
$("#userinputid").val(''); // id存放隐藏域
$("#usernameTD").html('');// 将username显示td中
// 提示
$.messager.alert('消息','授予用户成功!','info')
}
});
});

easyui datagrid 常见错误, 表格无法显示  ----- hibernate 有些对象因为延迟加载,所以报错  
******* 返回json时,将不需要显示 ,exclude  

******* 将返回数据 都使用include 控制 


0 0
原创粉丝点击