【springmvc+mybatis项目实战】杰信商贸-15.细粒度的权限控制+业务上报取消

上一篇总结我们完成了购销合同的增删改查业务,这一篇我们首先完成权限控制以及业务的上报取消的设置功能。

先说我们的权限控制
1.细粒度的权限控制
a)日常权限框架:
基于角色权限,用户、角色、权限(URL、主菜单、左侧菜单、按钮)

b)数据权限:
纵向的数据权限过滤:对数据进行过滤
1)本人(专责):登录后只能看到自己的信息
Where条件 create_by = #{当前登录者id}
2)部门(集团公司):登录后登录人是经理级别
A.只能看本部门
Where条件 create_dept=#{当前登录者所在的部门}

B.只能看到本部门和直属下属的数据

总经理-财务部-社保组
Where条件  create_dept=#{当前登录者所在的部门}
And create_dept like #{当前登录者所在部门}???

C.看到所有下属的数据
财务副总-财务部-社保组
Where条件 create_dept like #{当前登录者所在部门id}%

c)部门表的编码有业务规则
001总部
001004 财务部
001005 软件部
001004001 社保组
001004002 工资组
001005001 杰信组
编码3位为一层

d)跨部门跨人员权限控制(特殊的情况,大型企业)
举例:副总(分管),分管领导业务交叉
如图4.1-跨部门跨人员权限控制.png
解决方案:单独加表实现
Where条件 create_dept in (当前登录者配置的管理的部门集合) 
Or
Create_by in (当前登录者配置的管理的人员集合)

2.业务:购销合同的上报取消
流程
上报:当销售人员录入合同后,确认无误后,点击“提交”;提交之前的信息都为草稿,草稿状态时下一个流程的人看不到这个记录,当提交后,状态改为1,这时下一个流程的报运人员就可以看到,操作报运的信息。

取消:当提交后,发现信息少了,回退,点击“取消”。如果报运人员没有操作,可以回退;当报运人员已经开始操作并有了记录,这时不能回退,走“补录”流程。

关于状态的修改,我们的Mapper中已经有了状态修改的配置语句:

<!-- 修改状态 -->
<update id="updateState" parameterType="map">
	update contract_c set state=#{state}
	where CONTRACT_ID in
	<foreach collection="ids" item="id" open="(" close=")" separator=",">
		#{id}
	</foreach>
</update>

然后我们看Dao层,我们继承了BaseDao以及BaseDaoImpl,我们在ContractDao层中加入了修改状态的方法

package cn.hpu.jk.dao.impl;

import java.util.Map;

import org.springframework.stereotype.Repository;

import cn.hpu.jk.dao.ContractDao;
import cn.hpu.jk.domain.Contract;

@Repository //为了包扫描的时候这个Dao被扫描到
public class ContractDaoImpl extends BaseDaoImpl<Contract> implements ContractDao{

	public ContractDaoImpl(){
		//设置命名空间
		super.setNs("cn.hpu.jk.mapper.ContractMapper");
	}

	@Override
	public void updateState(Map map) {
		super.getSqlSession().update(super.getNs()+".updateState", map);
	}
}

然后看Service层,我们之前已经在Service层写好了“上报”以及“取消”的方法以及方法的实现:

@Override
public void submit(Serializable[] ids) {
	//默认刚建完的是草稿,建完之后确定没问题就上报
	//0草稿 1已上报
	 Map map=new HashMap();
	 map.put("state",1);//1已上报
	 map.put("ids", ids);

	 contractDao.updateState(map);
}

@Override
public void cancel(Serializable[] ids) {
	 Map map=new HashMap();
	 map.put("state",0);//0
	 map.put("ids", ids);

	 contractDao.updateState(map);
}

下面我们直接来写Controller层,在ContractController中添加下面的方法:

//上报
@RequestMapping("/cargo/contract/submit.action")
public String submit(String[] id){
	contractService.submit(id);

	return "redirect:/cargo/contract/list.action";
}

//取消
@RequestMapping("/cargo/contract/cancel.action")
public String cancel(String[] id){
	contractService.cancel(id);

	return "redirect:/cargo/contract/list.action";
}

我们的购销合同列表中已经加入“上报”和“取消”的按钮:

<li id="new"><a href="#" onclick="formSubmit('submit.action','_self');this.blur();">上报</a></li>
<li id="new"><a href="#" onclick="formSubmit('cancel.action','_self');this.blur();">取消</a></li>

重启服务器我们来测试一下
点击上报,发现此条数据由“草稿”改为“已上报”

上报结果

同理反过来也是可以的

上报取消功能完成。
转载请注明出处:http://blog.csdn.net/acmman/article/details/48498037

时间: 2024-10-01 21:48:12

【springmvc+mybatis项目实战】杰信商贸-15.细粒度的权限控制+业务上报取消的相关文章

【springmvc+mybatis项目实战】杰信商贸-1.项目背景

1.项目背景 杰信项目物流行业的项目, 杰信商贸是国际物流行业一家专门从事进出口玻璃器皿贸易的公司.公司总部位于十一个朝代的帝王之都西安,业务遍及欧美.随着公司不断发展壮大,旧的信息系统已无法满足公司的快速发展需求,妨碍公司成长,在此背景下,公司领导决定研发<杰信商贸综合管理平台>. <杰信商贸综合管理平台>分三期完成.一期完成仓储管理(包括:采购单.仓库.货物.条形码.入库.出库.退货.盘点.库存.库存上限报警.统计查询)和展会管理(包括:展会管理.出单管理),形成货物统一数字化

【springmvc+mybatis项目实战】杰信商贸-13.购销合同列表

我们接下来开始编写购销合同的列表业务 首先我们现往我们的FACTORY_C和基础表中倒入一些数据方便我们测试 导入数据的SQL文件:jk.sql (点击下载) 然后我们看到数据已经插入 启动服务器查看我们的数据已经插入 接下来我们开始做购销合同的业务.首先我们的数据库表已经建立(CONTRACT_C),我们首先创建购销合同的实体类Contract.java: package cn.hpu.jk.domain; import java.util.Date; public class Contrac

【springmvc+mybatis项目实战】杰信商贸-31.出口报运业务-购销合同查询与上报

我们上一篇完成了出口报运增删查修的mapper+Dao+Service+Controller,而且在Controller中添加和获取出口报运的列表的方法,然后成功获取了出口报运的列表: 然后我们这次要添加出口报运的"新增"方法,但是这个"新增"和以往的新增方法不同,这个要与之前的购销合同关联在一起. 我们出口报运的"新增"是这样的: 用户要选择多个合同,然后进行报运.(体现出业务关联) 报运新增时,报运专责只能看到已上报的购销合同. (操作出口报

【springmvc+mybatis项目实战】杰信商贸-23.重点知识回顾

1.重点知识回顾 购销合同查看,采用类似hibernate方式,都以对象关联方式. (1)PO为了利用MyBatis性能,在创建时,没有采用关联对象关联,而是将对象关键字段,也就是外键,利用这个普通属性,来记录值,表数据间关联关系存在,但对象关联关系不存在.代码也就变得简单.在货物新增时,只要从主对象中携带过来,主表ID即可. (2)VO为了方便对象关联时取数据.在列表循环货物信息时,要去查询当前货物下的附件时,如果采用上面的方式,只能再次查询.但是我们以对象关联方式,可以直接获取到当前货物下的

【springmvc+mybatis项目实战】杰信商贸-11.购销合同业务

生产厂家我们做完了,接下来我们要做一个更加复杂的业务,就是"货运管理" 首先我们先了解一下业务,什么是"货运管理"? "货运管理"是国际物流的概念,往常我们货物送到国内没有那么多事情,但是货物发往国外就多了很多手续,依靠小物流公司我们是很不可能的,需要行业的大背景的支撑.下面我们来看看它是怎么做的 a)业务:购销合同 当我们的客户通过展会.其它渠道跟杰信公司联系上以后,他们看上杰信的货物样品,他们会跟杰信签订一个购买合同(样式要求,货物数量),客

【springmvc+mybatis项目实战】杰信商贸-17.货物修改+删除

重点知识回顾 a)主从结构: 1)它和主表在mapper有什么不同 按对象来映射(hibernate) 按普通字段来映射(mybatis) b)前台页面的结构 货物的外键:合同,通过get的方式在url后面加参数(主从) 货物的外键:生产厂家,通过下拉列表的方式(只需要一个id时) 对象方式获得外键:一般是需要多个字段 c)权限管理:细粒度的权限 日常权限系统:角色.用户.权限,它实现主菜单.左侧菜单.URL.按钮 细粒度权限系统:包含上面的所有内容,还要包括数据权限(对数据进行过滤,按人,按部

【springmvc+mybatis项目实战】杰信商贸-4.maven依赖+PO对+映射文件

我们来为刚刚创建的数据库表来在工程中创建PO对象 首先我们要创建工程 项目的开发环境 序号 工  具                用  途 1 MyEclipse 2014   IDE 2 JDK 1.7.9        Java虚拟机 3 TOMCAT 7.0.26       中间件 4 Oracle11g/10g.MySQL 5.0.87数据库 5 PL/SQL .SQLyog 8.2SQL控制台 6 apache-maven-3.0.5MAVEN 7 PowerDesigner 15

【springmvc+mybatis项目实战】杰信商贸-6.重点知识回顾

1.重点知识回顾 Maven 1)覆盖仓库文件,实际企业开发,公司会架一个测试服务器,在测试服务器中架私服.我们开发人员的程序,都连接私服.当本地没有项目中要使用的jar,Myeclipse maven插件会自动到私服去找jar,如果没找到去中央仓库maven寻找,找到后下载.activiti-engine-5.13.jar.lastUpdated 当访问远程仓库时,由于网络不稳定,有可能中断.当程序再次连接,它会自动修正.Pom文件报错,jar错误,去仓库目录找jar,jar存在,点击jar开

【springmvc+mybatis项目实战】杰信商贸-8.生产厂家修改

上一次我们做了生产厂家的新增,下面我们来做一下生产厂家的修改 回顾一下我们的FactoryMapper.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">