我们要完成角色管理这一块,首先我们看一下这一块的需求:
I.界面描述
II.功能说明
角色管理:可以根据角色名称查询系统用户;在页面中点击“新增”可以添加用户、点击删除可以批量删除选中的用户。在角色列表中显示角色名称、权限、状态、操作;其中操作列中包括编辑、删除两个功能;点击“编辑”则编辑角色信息,删除则删除该角色。
编辑角色:编辑页面包括角色名称、权限列表(可复选多个权限)、状态(有效、无效)。
角色与权限的关系:
系统中可以存在多个角色,每个角色可以自由的组合系统定义的权限集合。即角色和权限的关系是多对多的关系。为了保存这种多对多关系,需要一个角色权限表来保存。角色与角色权限的关系是一对多的关系;而权限与角色权限的关系也为一对多关系。
系统权限:行政管理,后勤服务,在线学习,纳税服务,我的空间
管理员:纳税服务,我的空间
一般用户:我的空间
角色与权限的关系:多对多
一个角色可有多个权限;一个权限可以被多个角色使用
角色表:role
角色ID,角色名称,状态
1 管理员 1
2 一般用户 1
角色权限表:role_privilege
角色ID,权限code
1 nsfw
1 space
2 space
权限表:privilege
权限code,权限名称
nsfw 纳税服务
space 我的空间
联合主键:①实现Serializable ②重写 hashCode, equals方法
角色与权限的关系:
下面开始编码实现:
1.定义系统权限集
将系统中需要使用到的权限先定义出来:粗粒度的分为各个子系统的访问权限;这些权限可以定义在常量文件中:
package cn.edu.hpu.tax.core.content; import java.util.HashMap; import java.util.Map; public class Constant { /*-----------------系统权限集合-------------------*/ public static String PRIVILEGE_XZGL="xzgl"; public static String PRIVILEGE_HQFW="hqfw"; public static String PRIVILEGE_ZXXX="zxxx"; public static String PRIVILEGE_NSFW="nsfw"; public static String PRIVILEGE_SPACE="spaces"; public static Map<String,String> PRIVILEGE_MAP; static{ PRIVILEGE_MAP=new HashMap<String,String>(); PRIVILEGE_MAP.put(PRIVILEGE_XZGL, "行政管理"); PRIVILEGE_MAP.put(PRIVILEGE_HQFW, "后勤服务"); PRIVILEGE_MAP.put(PRIVILEGE_ZXXX, "在线学习"); PRIVILEGE_MAP.put(PRIVILEGE_NSFW, "纳税服务"); PRIVILEGE_MAP.put(PRIVILEGE_SPACE, "我的空间"); } }
2.角色管理CRUD
首先建立角色的实体类:
package cn.edu.hpu.tax.role.entity; import java.io.Serializable; import java.util.Set; public class Role implements Serializable { private String roleId; private String name; private String state; private Set<RolePrivilege> rolePrivileges; //角色状态 public final static String ROLE_STATE_VALID = "1";//有效 public final static String ROLE_STATE_INVALID = "0";//无效 public Role() { super(); // TODO Auto-generated constructor stub } public Role(String roleId, String name, String state, Set<RolePrivilege> rolePrivileges) { super(); this.roleId = roleId; this.name = name; this.state = state; this.rolePrivileges = rolePrivileges; } public String getRoleId() { return roleId; } public void setRoleId(String roleId) { this.roleId = roleId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getState() { return state; } public void setState(String state) { this.state = state; } public Set<RolePrivilege> getRolePrivileges() { return rolePrivileges; } public void setRolePrivileges(Set<RolePrivilege> rolePrivileges) { this.rolePrivileges = rolePrivileges; } }
然后是其映射文件:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="cn.edu.hpu.tax.role.entity.Role" table="role"> <id name="roleId" type="java.lang.String"> <column name="role_id" length="32" /> <generator class="uuid.hex" /> </id> <property name="name" type="java.lang.String"> <column name="name" length="20" not-null="true" /> </property> <property name="state" type="java.lang.String"> <column name="state" length="1"/> </property> <set name="rolePrivileges" inverse="true" lazy="false" cascade="save-update,delete"> <key> <column name="role_id"></column> </key> <one-to-many class="cn.edu.hpu.tax.role.entity.RolePrivilege"/> </set> </class> </hibernate-mapping>
下面开始写角色权限RolePrivilege的实体以及映射文件:
package cn.edu.hpu.tax.role.entity; import java.io.Serializable; public class RolePrivilege implements Serializable { //联合主键 private RolePrivilegeId id; public RolePrivilege(){ } public RolePrivilege(RolePrivilegeId id) { super(); this.id = id; } public RolePrivilegeId getId() { return id; } public void setId(RolePrivilegeId id) { this.id = id; } }
其中联合主键类RolePrivilegeId:
package cn.edu.hpu.tax.role.entity; import java.io.Serializable; public class RolePrivilegeId implements Serializable{ private Role role; private String code; public RolePrivilegeId(){ } public RolePrivilegeId(Role role, String code) { super(); this.role = role; this.code = code; } public Role getRole() { return role; } public void setRole(Role role) { this.role = role; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } //重写hashCode与equals方法(不用自己写,MyEclipse可生成) @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((code == null) ? 0 : code.hashCode()); result = prime * result + ((role == null) ? 0 : role.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; RolePrivilegeId other = (RolePrivilegeId) obj; if (code == null) { if (other.code != null) return false; } else if (!code.equals(other.code)) return false; if (role == null) { if (other.role != null) return false; } else if (!role.equals(other.role)) return false; return true; } }
RolePrivilege的映射文件:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="cn.edu.hpu.tax.role.entity.RolePrivilege" table="role_Privilege"> <composite-id name="id" class="cn.edu.hpu.tax.role.entity.RolePrivilegeId"> <key-many-to-one name="role" class="cn.edu.hpu.tax.role.entity.Role" lazy="false"> <column name="role_id" not-null="true"></column> </key-many-to-one> <key-property name="code" type="java.lang.String"> <column name="code" length="20"></column> </key-property> </composite-id> </class> </hibernate-mapping>
下面编写Dao层:
RoleDao.java:
package cn.edu.hpu.tax.role.dao; import cn.edu.hpu.tax.core.dao.BaseDao; import cn.edu.hpu.tax.role.entity.Role; public interface RoleDao extends BaseDao<Role> { public void deletePrivilegeByRoleId(String roleId); }
RoleDaoImpl.java:
package cn.edu.hpu.tax.role.dao.impl; import org.hibernate.Query; import cn.edu.hpu.tax.core.dao.impl.BaseDaoImpl; import cn.edu.hpu.tax.role.dao.RoleDao; import cn.edu.hpu.tax.role.entity.Role; public class RoleDaoImpl extends BaseDaoImpl<Role> implements RoleDao{ @Override public void deletePrivilegeByRoleId(String roleId) { //hql语句是按照类来的,不是按照数据库表来写语句的 Query query=getSession().createQuery("DELETE FROM RolePrivilege WHERE id.role.roleId=?"); query.setParameter(0, roleId); query.executeUpdate(); } }
然后是Service:
RoleService.java:
package cn.edu.hpu.tax.role.service; import java.io.Serializable; import java.util.List; import cn.edu.hpu.tax.role.entity.Role; public interface RoleService { //新增 public void save(Role role); //更新 public void update(Role role); //根据id删除 public void delete(Serializable id); //根据id查找 public Role findObjectById(Serializable id); //查找列表 public List<Role> findObjects(); }
RoleServiceImpl.java:
package cn.edu.hpu.tax.role.service.impl; import java.io.Serializable; import java.util.List; import javax.annotation.Resource; import org.springframework.stereotype.Service; import cn.edu.hpu.tax.role.dao.RoleDao; import cn.edu.hpu.tax.role.entity.Role; import cn.edu.hpu.tax.role.service.RoleService; @Service("roleService") public class RoleServiceImpl implements RoleService{ @Resource private RoleDao roleDao; @Override public void save(Role role) { roleDao.save(role); } @Override public void update(Role role) { //1.删除该角色对应的所有权限 roleDao.deletePrivilegeByRoleId(role.getRoleId()); //2.更新角色及其权限 roleDao.update(role); } @Override public void delete(Serializable id) { roleDao.delete(id); } @Override public Role findObjectById(Serializable id) { return roleDao.findObjectById(id); } @Override public List<Role> findObjects() { return roleDao.findObjects(); } }
然后是action层:
后面内容在下一篇:http://blog.csdn.net/acmman/article/details/49513077
转载请注明出处:http://blog.csdn.net/acmman/article/details/49512903