【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

时间: 2024-10-11 23:53:15

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

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

接上一篇http://blog.csdn.net/acmman/article/details/49512903 然后是action层: package cn.edu.hpu.tax.role.action; import java.util.HashSet; import java.util.List; import javax.annotation.Resource; import cn.edu.hpu.tax.core.action.BaseAction; import cn.edu.hp

【SSH项目实战】国税协同平台-19.信息发布管理完善&amp;amp;ueditor文本编辑插件

我们上次虽然完成了信息发布管理模块基础的增删改查,但是我们还有需求没有完成,其中最重要的一点就是需求上要求我们发布的信息必须是有格式的,word文档那种格式,而我们的原始textarea是清除所有文本格式的,我们在这一次来解决这个问题. 我们使用ueditor插件(百度开发)来解决这个问题,ueditor是一种"父文本编辑器",也叫"在线编辑器",可以使用这种插件来编辑各种格式的文本.(当然还有CKEdit.FckEdit等插件,我们这里使用ueditor插件,因为

【SSH项目实战】国税协同平台-18.信息发布管理需求分析&amp;amp;CRUD

我们接下来要做一个信息发布管理的功能,首先来看看我们的需求分析: 要求 信息发布管理原型界面: 编辑信息原型界面: 2.6.2功能说明 信息发布管理: 根据信息标题.信息类型进行信息查询:可以在页面中点击"新增"发布信息,点击"删除"进行批量删除信息.列表数据包括信息标题.信息分类.申请人.申请时间.状态.操作:其中操作栏的内容为停用/发布.编辑.删除.当信息的状态为停用时,在操作栏显示发布.编辑.删除,当信息的状态为发布时,操作栏显示停用.编辑.删除. 编辑信息:

【SSH项目实战】国税协同平台-13.用户与角色关系

上一次写到角色权限管理,我们设定的角色是要使用的,我们接下来写用户与角色的关系. 角色与权限:多对多 一个角色可以有多个权限,一个权限可以被多个角色使用. 那我们下面就来使用我们完成的角色. 我们先来看一下需求,记不记得之前的用户编辑界面: 可以看到,我们注册用户的时候是要给用户安排一个角色的,而我们的角色在角色管理系统里面已经创建好了,可以从创建好的角色中挑选需要的角色(该角色拥有自己特有的权限). 所以,我们说一下用户与角色的关系设计: 用户:用户1,用户2 角色:管理员,一般用户 用户与角

【SSH项目实战】国税协同平台-1.项目介绍

项目介绍 1.1项目背景 国税协同办公平台包括了行政管理.后勤服务.在线学习.纳税服务.我的空间等几个子系统:我们本次主要的开发功能是纳税服务子系统的部分模块和基于纳税服务子系统信息的个人工作台首页.纳税服务子系统是办税PC前端或移动端的后台管理系统,主要包括的功能有系统角色管理.用户管理.信息发布管理.投诉受理.纳税咨询.易告知.服务预约.服务调查等模块. 系统的主界面: 我们要做的模块界面: 1.2项目前期 项目前期:一般是由客户经理从客户那边了解到有关该项目的招标信息,然后开发公司再组织竞

【SSH项目实战】国税协同平台-14.系统、子系统首页&amp;amp;登录功能1

我们做完了用户与角色的分配,在设置用户在相应的角色下的操作之前,我们先完成用户的登录功能. 首先,我们先加载我们的系统的首页和子首页.很简单,就是转发到一个jsp页面而已,我们先写一个HomeAction来设置跳转功能: package cn.edu.hpu.tax.core.action; import com.opensymphony.xwork2.ActionSupport; public class HomeAction extends ActionSupport{ //跳转到首页 pu

【SSH项目实战】国税协同平台-21.PowerDesigner概念、物理模型

我们之前做的都是先建实体类再去创建表(或者是hibernate自动生成表),有一个概念叫"逆向工程",就是先创建表,再由表来生成相应的实体类和映射文件. 在讲"逆向工程"之前,我们先学一个数据库模型设计工具,做"PowerDesigner",是设计实体以及实体之间的关系的,而且可以生成数据库建表语句的工具. 我们打开PowerDesigner,创建一个"概念模型",实体集关系表: 然后介绍一下侧面的工具: 上面常用的就这几个

【SSH项目实战】国税协同平台-3.资源文件分类&amp;amp;log4j&amp;amp;抽取BaseAction

上次我们搭建了SSH框架的环境,然后做了单元测试,下面我们继续来完善我们工厂的准备工作. 3.1资源文件分类 (1)将配置文件归类到新建config文件夹: (2)源代码目录按照功能模块进行划分:cn.edu.hpu.子系统.功能模块.* (3)Jsp放置到WEB-INF目录下: (4)其它: 新建一个test源文件架(Source Folder),我们把上次所有测试的代码全部移入test文件夹下,然后专门为配置文件创建一个conf源文件夹,将配置文件移入,然后src中先建立一个包准备放新写的代

【SSH项目实战】国税协同平台-31.我要投诉功能1

我们之前完成了投诉回复和保存功能,这次我们将要完成历史受理信息的显示 以及数据回显功能,当然还有用户编写投诉信息的入口,我们这次继续. 可以注意到,在deilUI.jsp上我们之前的投诉人信息显示,不管是匿名还是不匿名,投诉人的姓名.手机号码都是显示出来的: <tr> <td class="tdBg">投诉人姓名:</td> <td><s:property value="complain.compName"/&g