这一部分的内容,个人觉得很重要。在这部分的学习中,我会尽可能详细地分析每一个知识点。
首先,我们需要开发一个小模块,部门管理模块
1) 设计实体Bean,使用36位的uuid作为实体的标识属性
2) 定义部门管理模块的接口和实现类
3) Action中实现部门管理模块的功能(部门分页,添加,修改,删除)
生成uuid:UUID.randomUUID().toString();
其次,我们还需要开发员工管理模块
1) 设计员工实体Bean(imageName属性只存放文件名称,而且名称采用uuid生成,图片保存在images/employee/[username]/目录;实体Bean中定义方法getImagePath()来返回图片地址的全路径
非持久化属性使用@Transient注解来指定
2) 定义员工管理模块的接口和实现类
3) Action中实现员工管理模块的功能(员工分页,添加,修改,离职状态设置)
解决因外键约束而导致的部门删除失败:在部门模块实现类中重写delete方法
前面,我们完成了部门和员工管理模块,接下来,我们开始权限管理模块的开发
1. 权限的定义:我们这里根据模块和它所属的操作类型来确定权限,比如部门的添加权限由所属模块department和其权限值add两个部分组成
2. 巴巴运动网采用粗细粒度结合的权限设置,粗粒度采用filter来实现,主要对内容路径进行过滤,细粒度主要对页面中每一个按钮定义所属的权限
3. 定义系统权限Bean时,标示属性必须要实现序列化接口;复合组键类必须要重写equals方法和hashCode方法;@Embeddable注解指定SystemPrivilegePK是实体Bean SystemPrivilege的标识属性所属类型,复合组键在定义实体Bean时使用@EmbeddedId来标注
4. 定义SystemInitAction用于系统权限的初始化
5. 为了便于为用户分配权限,这里引入权限组(角色)的概念,用户属于哪个权限组,他就拥有这个权限组下面的所有权限
6. 定义权限组实体Bean时,权限组与权限之间是多对多的关系,这里就需要使用注解定义中间表
@JoinTable(name="group_privilege",
joinColumns=@JoinColumn(name="group_id"),
inverseJoinColumns={@JoinColumn(name="module", referencedColumnName="module"),
@JoinColumn(name="privilege", referencedColumnName="privilege")}
)
注:name指定中间表的名称,joinColumns指定中间表的外键名,inverseJoinColumns指定中间表中被维护端的列名,referencedColumnName用于指定中间表中被维护端与复合组键中哪一属性相联系
7.完成权限组的分页/添加/修改/删除功能
8.为用户设置权限组