今天继续学习佟老师的教育办公系统的旅程,今天主要学习权限模块和员工模块的集成;
1. 集成权限模块和员工模块 .
1). 新录入员工时 , 可以为其添加角色
① . 使用 jQuery 的 weebox 插件弹出角色的对话框
2). 修改员工时 , 可以为其修改角色
3). 实现导航的页面的权限化 , 根据当前登录员工的权限定制 struts-menu, 并添加登出功能 .
① . 参考 struts-menu 例程中的 Dynamic, Databased-driven Menu 链接中的代码 , 提供模拟实现
- 员工管理
- 员工添加
- 员工查询
② . 修改 Authority 领域模型使其适应 struts-menu 实现 :
private Authority parentAuthority;
private Set<Authority> subAuthorities;
private Resource mainResource;
private int isNavigate;
③ . 新建 MenuAction, 用于显示当前登录用户的导航按钮树 .
a. 获取当前用户的登录名
b. 利用登录名获取当前用户的所具有的一切权限信息 , 利用这些权限构建导航按钮树 .
④ . 在 struts-menu 中添加 " 登出 " 链接 , 并在 spring-security 中配置 , 让其生效 , 再为其添加 js, 使其可以退出当前页面
4). 实现页面的权限化 : 即根据权限定制页面的 " 超链接 "
使用 spring-security 的自定义标签实现 .
在 <script type="text/javascript"> 区域内使用 java 自定义标签的方法为 : 把自定义标签使用 '' 引起来
5). 删除 " 角色 ":
① . 因为在角色中没有和 Employee 相关联 , 所以在删除角色时 , 可能会发生外键引用异常
② . 需要使用手工的方法删除和 Role 对应的 Employee 中间表的信息 :
--> 先需要获取到和当前 Role 对象关联的所有的 Employee: SELECT e FROM Employee e JOIN e.roleSet r WHERE r.id = ?
--> 再使上述的所有的 Employee 都和当前的 Role 对象解除关联关系 :
List<Employee> employees = employeeDao.getByEmployeesRole(role);
for(Employee employee: employees){
employee.getRoleSet().remove(role);
}
--> 删除 Role 对象 :
roleDao.delete(id);