上一篇总结我们完成了购销合同的增删改查业务,这一篇我们首先完成权限控制以及业务的上报取消的设置功能。
先说我们的权限控制
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中已经有了状态修改的配置语句:
然后我们看Dao层,我们继承了BaseDao以及BaseDaoImpl,我们在ContractDao层中加入了修改状态的方法
然后看Service层,我们之前已经在Service层写好了“上报”以及“取消”的方法以及方法的实现:
下面我们直接来写Controller层,在ContractController中添加下面的方法:
我们的购销合同列表中已经加入“上报”和“取消”的按钮:
重启服务器我们来测试一下
点击上报,发现此条数据由“草稿”改为“已上报”
上报取消功能完成。
转载请注明出处:http://blog.csdn.net/acmman/article/details/48498037
先说我们的权限控制
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