【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.定义系统权限集
将系统中需要使用到的权限先定义出来:粗粒度的分为各个子系统的访问权限;这些权限可以定义在常量文件中:
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

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光仔December

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值