【SSH项目实战】国税协同平台-11.角色权限管理1

我们要完成角色管理这一块,首先我们看一下这一块的需求:
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.定义系统权限集
将系统中需要使用到的权限先定义出来:粗粒度的分为各个子系统的访问权限;这些权限可以定义在常量文件中:
[java]  view plain copy
  1. package cn.edu.hpu.tax.core.content;  
  2.   
  3. import java.util.HashMap;  
  4. import java.util.Map;  
  5.   
  6. public class Constant {  
  7.     /*-----------------系统权限集合-------------------*/  
  8.     public static String PRIVILEGE_XZGL="xzgl";  
  9.     public static String PRIVILEGE_HQFW="hqfw";  
  10.     public static String PRIVILEGE_ZXXX="zxxx";  
  11.     public static String PRIVILEGE_NSFW="nsfw";  
  12.     public static String PRIVILEGE_SPACE="spaces";  
  13.       
  14.     public static Map<String,String> PRIVILEGE_MAP;  
  15.     static{  
  16.         PRIVILEGE_MAP=new HashMap<String,String>();  
  17.         PRIVILEGE_MAP.put(PRIVILEGE_XZGL, "行政管理");  
  18.         PRIVILEGE_MAP.put(PRIVILEGE_HQFW, "后勤服务");  
  19.         PRIVILEGE_MAP.put(PRIVILEGE_ZXXX, "在线学习");  
  20.         PRIVILEGE_MAP.put(PRIVILEGE_NSFW, "纳税服务");  
  21.         PRIVILEGE_MAP.put(PRIVILEGE_SPACE, "我的空间");  
  22.     }  
  23. }  

2.角色管理CRUD
首先建立角色的实体类:
[java]  view plain copy
  1. package cn.edu.hpu.tax.role.entity;  
  2.   
  3. import java.io.Serializable;  
  4. import java.util.Set;  
  5.   
  6. public class Role implements Serializable {  
  7.   
  8.     private String roleId;  
  9.     private String name;  
  10.     private String state;  
  11.     private Set<RolePrivilege> rolePrivileges;  
  12.       
  13.     //角色状态  
  14.     public final static String ROLE_STATE_VALID = "1";//有效  
  15.     public final static String ROLE_STATE_INVALID = "0";//无效  
  16.       
  17.     public Role() {  
  18.         super();  
  19.         // TODO Auto-generated constructor stub  
  20.     }  
  21.       
  22.     public Role(String roleId, String name, String state,  
  23.             Set<RolePrivilege> rolePrivileges) {  
  24.         super();  
  25.         this.roleId = roleId;  
  26.         this.name = name;  
  27.         this.state = state;  
  28.         this.rolePrivileges = rolePrivileges;  
  29.     }  
  30.   
  31.   
  32.     public String getRoleId() {  
  33.         return roleId;  
  34.     }  
  35.     public void setRoleId(String roleId) {  
  36.         this.roleId = roleId;  
  37.     }  
  38.     public String getName() {  
  39.         return name;  
  40.     }  
  41.     public void setName(String name) {  
  42.         this.name = name;  
  43.     }  
  44.     public String getState() {  
  45.         return state;  
  46.     }  
  47.     public void setState(String state) {  
  48.         this.state = state;  
  49.     }  
  50.     public Set<RolePrivilege> getRolePrivileges() {  
  51.         return rolePrivileges;  
  52.     }  
  53.     public void setRolePrivileges(Set<RolePrivilege> rolePrivileges) {  
  54.         this.rolePrivileges = rolePrivileges;  
  55.     }  
  56.       
  57. }  

然后是其映射文件:
[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4.   
  5.   
  6. <hibernate-mapping>  
  7.     <class name="cn.edu.hpu.tax.role.entity.Role" table="role">  
  8.         <id name="roleId" type="java.lang.String">  
  9.             <column name="role_id" length="32" />  
  10.             <generator class="uuid.hex" />  
  11.         </id>  
  12.         <property name="name" type="java.lang.String">  
  13.             <column name="name" length="20" not-null="true" />  
  14.         </property>  
  15.         <property name="state" type="java.lang.String">  
  16.             <column name="state" length="1"/>  
  17.         </property>         
  18.         <set name="rolePrivileges" inverse="true" lazy="false"  cascade="save-update,delete">  
  19.             <key>  
  20.                 <column name="role_id"></column>  
  21.             </key>  
  22.             <one-to-many class="cn.edu.hpu.tax.role.entity.RolePrivilege"/>  
  23.         </set>  
  24.     </class>  
  25.   
  26.   
  27. </hibernate-mapping>  
  28.       

下面开始写角色权限RolePrivilege的实体以及映射文件:
[java]  view plain copy
  1. package cn.edu.hpu.tax.role.entity;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. public class RolePrivilege implements Serializable {  
  6.     //联合主键  
  7.     private RolePrivilegeId id;  
  8.       
  9.     public RolePrivilege(){  
  10.           
  11.     }  
  12.       
  13.     public RolePrivilege(RolePrivilegeId id) {  
  14.         super();  
  15.         this.id = id;  
  16.     }  
  17.   
  18.   
  19.     public RolePrivilegeId getId() {  
  20.         return id;  
  21.     }  
  22.   
  23.   
  24.     public void setId(RolePrivilegeId id) {  
  25.         this.id = id;  
  26.     }  
  27.       
  28. }  

其中联合主键类RolePrivilegeId:
[java]  view plain copy
  1. package cn.edu.hpu.tax.role.entity;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. public class RolePrivilegeId implements Serializable{  
  6.   
  7.   
  8.     private Role role;  
  9.     private String code;  
  10.       
  11.     public RolePrivilegeId(){  
  12.           
  13.     }  
  14.       
  15.     public RolePrivilegeId(Role role, String code) {  
  16.         super();  
  17.         this.role = role;  
  18.         this.code = code;  
  19.     }  
  20.   
  21.   
  22.     public Role getRole() {  
  23.         return role;  
  24.     }  
  25.   
  26.   
  27.     public void setRole(Role role) {  
  28.         this.role = role;  
  29.     }  
  30.   
  31.   
  32.     public String getCode() {  
  33.         return code;  
  34.     }  
  35.   
  36.   
  37.     public void setCode(String code) {  
  38.         this.code = code;  
  39.     }  
  40.       
  41.     //重写hashCode与equals方法(不用自己写,MyEclipse可生成)  
  42.     @Override  
  43.     public int hashCode() {  
  44.         final int prime = 31;  
  45.         int result = 1;  
  46.         result = prime * result + ((code == null) ? 0 : code.hashCode());  
  47.         result = prime * result + ((role == null) ? 0 : role.hashCode());  
  48.         return result;  
  49.     }  
  50.   
  51.   
  52.     @Override  
  53.     public boolean equals(Object obj) {  
  54.         if (this == obj)  
  55.             return true;  
  56.         if (obj == null)  
  57.             return false;  
  58.         if (getClass() != obj.getClass())  
  59.             return false;  
  60.         RolePrivilegeId other = (RolePrivilegeId) obj;  
  61.         if (code == null) {  
  62.             if (other.code != null)  
  63.                 return false;  
  64.         } else if (!code.equals(other.code))  
  65.             return false;  
  66.         if (role == null) {  
  67.             if (other.role != null)  
  68.                 return false;  
  69.         } else if (!role.equals(other.role))  
  70.             return false;  
  71.         return true;  
  72.     }  
  73. }  

RolePrivilege的映射文件:
[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4.   
  5. <hibernate-mapping>  
  6.     <class name="cn.edu.hpu.tax.role.entity.RolePrivilege" table="role_Privilege">  
  7.         <composite-id name="id" class="cn.edu.hpu.tax.role.entity.RolePrivilegeId">  
  8.             <key-many-to-one name="role" class="cn.edu.hpu.tax.role.entity.Role" lazy="false">  
  9.                 <column name="role_id" not-null="true"></column>  
  10.             </key-many-to-one>  
  11.             <key-property name="code" type="java.lang.String">  
  12.                 <column name="code" length="20"></column>  
  13.             </key-property>  
  14.         </composite-id>  
  15.     </class>  
  16.   
  17.   
  18. </hibernate-mapping>   

下面编写Dao层:
RoleDao.java:
[java]  view plain copy
  1. package cn.edu.hpu.tax.role.dao;  
  2.   
  3. import cn.edu.hpu.tax.core.dao.BaseDao;  
  4. import cn.edu.hpu.tax.role.entity.Role;  
  5.   
  6. public interface RoleDao extends BaseDao<Role> {  
  7.     public void deletePrivilegeByRoleId(String roleId);  
  8. }  

RoleDaoImpl.java:
[java]  view plain copy
  1. package cn.edu.hpu.tax.role.dao.impl;  
  2.   
  3. import org.hibernate.Query;  
  4.   
  5. import cn.edu.hpu.tax.core.dao.impl.BaseDaoImpl;  
  6. import cn.edu.hpu.tax.role.dao.RoleDao;  
  7. import cn.edu.hpu.tax.role.entity.Role;  
  8.   
  9.   
  10. public class RoleDaoImpl extends BaseDaoImpl<Role> implements RoleDao{  
  11.   
  12.   
  13.     @Override  
  14.     public void deletePrivilegeByRoleId(String roleId) {  
  15.         //hql语句是按照类来的,不是按照数据库表来写语句的  
  16.          Query query=getSession().createQuery("DELETE FROM RolePrivilege WHERE id.role.roleId=?");  
  17.          query.setParameter(0, roleId);  
  18.          query.executeUpdate();  
  19.     }  
  20. }  

然后是Service:
RoleService.java:
[java]  view plain copy
  1. package cn.edu.hpu.tax.role.service;  
  2.   
  3. import java.io.Serializable;  
  4. import java.util.List;  
  5.   
  6. import cn.edu.hpu.tax.role.entity.Role;  
  7.   
  8.   
  9. public interface RoleService {  
  10.     //新增  
  11.     public void save(Role role);  
  12.     //更新  
  13.     public void update(Role role);  
  14.     //根据id删除  
  15.     public void delete(Serializable id);  
  16.     //根据id查找  
  17.     public Role findObjectById(Serializable id);  
  18.     //查找列表  
  19.     public List<Role> findObjects();  
  20.   
  21.   
  22. }  

RoleServiceImpl.java:
[java]  view plain copy
  1. package cn.edu.hpu.tax.role.service.impl;  
  2.   
  3. import java.io.Serializable;  
  4. import java.util.List;  
  5.   
  6. import javax.annotation.Resource;  
  7.   
  8. import org.springframework.stereotype.Service;  
  9.   
  10. import cn.edu.hpu.tax.role.dao.RoleDao;  
  11. import cn.edu.hpu.tax.role.entity.Role;  
  12. import cn.edu.hpu.tax.role.service.RoleService;  
  13.   
  14.   
  15. @Service("roleService")  
  16. public class RoleServiceImpl implements RoleService{  
  17.   
  18.   
  19.     @Resource  
  20.     private RoleDao roleDao;  
  21.       
  22.     @Override  
  23.     public void save(Role role) {  
  24.           
  25.         roleDao.save(role);  
  26.     }  
  27.   
  28.   
  29.     @Override  
  30.     public void update(Role role) {  
  31.         //1.删除该角色对应的所有权限  
  32.         roleDao.deletePrivilegeByRoleId(role.getRoleId());  
  33.         //2.更新角色及其权限  
  34.         roleDao.update(role);  
  35.           
  36.     }  
  37.     @Override  
  38.     public void delete(Serializable id) {  
  39.         roleDao.delete(id);  
  40.     }  
  41.   
  42.   
  43.     @Override  
  44.     public Role findObjectById(Serializable id) {  
  45.         return roleDao.findObjectById(id);  
  46.     }  
  47.   
  48.   
  49.     @Override  
  50.     public List<Role> findObjects() {  
  51.         return roleDao.findObjects();  
  52.     }  
  53. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值