栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

0509-国际物流商综平台项目-03 部门、用户、角色、模块 CURD传统认知与BRAC认证 细粒度权限控制

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

0509-国际物流商综平台项目-03 部门、用户、角色、模块 CURD传统认知与BRAC认证 细粒度权限控制

一.回顾

1.项目首页面执行过程分析
2.顶部菜单点击后,为什么左侧,中间区域会改变
3.为什么左侧菜单点击后,显示结果在中间区域
4.DA0分析
5.Page分页组件
6.编写及酉己置Service, Action
7完成DeptAction类的CRUD操作
8.baseAction 的类

二.DeptAction 更新&删除 Dept .java 父部门 、用户
public class Dept implements Serializable {
	private String id;
	private Set users  = new HashSet(0);//部门与用户    一对多
	
	private String deptName;//部门名称
	private Dept parent; //父部门  自关联  子部门与父部门     多对一
	private Integer state;//状态    1代表启用    0代表停用
	public String getId() {
Dept.hbm.xml 子部门与父部门/多对一 部门与用户 一对多

   
      
         
      
      
      
     
      
      
      
      
      
         
         
      
   

界面-列表

jDeptUpdate.jsp 分页,列表

   
	${links }
	
		
序号 编号 上级 名称
${st.count } ${dept.id } ${dept.parent.deptName } ${dept.deptName }
分页 Page.java results
public class Page {
    private int pageNo = 1;							//页码,默认是第一页
    private int pageSize = SysConstant.PAGE_SIZE;	//每页显示的记录数,默认是10
    private int totalRecord;						//总记录数
    private int totalPage;							//总页数
    private List results;						//对应的当前页记录
    private Map params = new HashMap();		//其他的参数我们把它分装成一个Map对象
	
    public String url;		//分页按钮中的转向链接
    public void setUrl(String url) {
    	this.url = url;
    }

    public String links; 
	public String getlinks() {
		return sBuf.toString();
	}
DeptAction.java list() 模型驱动 ModelDriven
public class DeptAction extends baseAction implements ModelDriven {
	private Dept model = new Dept();
	public Dept getModel() {
		return model;
	}
	
	//分页查询
	private Page page  = new Page();
	public Page getPage() {
		return page;
	}
	public void setPage(Page page) {
		this.page = page;
	}
	
	
	//注入DeptService
	private DeptService deptService;
	public void setDeptService(DeptService deptService) {
		this.deptService = deptService;
	}
	
	
	public String list() throws Exception {
		deptService.findPage("from Dept", page, Dept.class, null);
		
		//设置分页的url地址
		page.setUrl("deptAction_list");
		
		//将page对象压入栈顶
		super.push(page);
		
		
		return "list";
	}
	
baseAction .java push(Object obj)、put(String key ,Object value)


//通过RequestAware, SessionAware, ApplicationAware实行接口获得request,session,application对象,action中就可直接调用

public class baseAction extends ActionSupport implements RequestAware, SessionAware, ApplicationAware{
	private static Logger log = Logger.getLogger(baseAction.class);
	
	private static final long serialVersionUID = 1L;

	protected Map request;
	protected Map session;
	protected Map application;

	public Map getRequest() {
		return request;
	}

	public Map getSession() {
		return session;
	}

	public Map getApplication() {
		return application;
	}

	@Override
	public void setRequest(Map request) {
		this.request = request;
	}

	@Override
	public void setSession(Map session) {
		this.session = session;
	}

	@Override
	public void setApplication(Map application) {
		this.application = application;
	}

	
	public void push(Object obj){
		ActionContext.getContext().getValueStack().push(obj);
	}
	
	
	public void put(String key ,Object value){
		ActionContext.getContext().put(key, value);
	}
	
	
	
	public User getCurUser(){
		User user = (User)session.get(SysConstant.CURRENT_USER_INFO);
		return user;
	}
	
}

struts-sysadmin.xml /sysadmin/deptAction_*

	
	

	
		
		    /WEB-INF/pages/sysadmin/dept/jDeptList.jsp
		    /WEB-INF/pages/sysadmin/dept/jDeptView.jsp
		    /WEB-INF/pages/sysadmin/dept/jDeptCreate.jsp
		    /WEB-INF/pages/sysadmin/dept/jDeptUpdate.jsp
		    deptAction_list
		
界面-查看

DeptAction.java toView 进入查看页面 jDeptView.jsp
public String toview() throws Exception {
		//1.调用业务方法,根据id,得到对象
		Dept dept = deptService.get(Dept.class, model.getId());
		
		//放入栈顶
		super.push(dept);
		
		//3.跳页面
		return "toview";
	}
界面-修改

DeptAction.java toupdate() 进入修改页面 jDeptUpdate.jsp
	public String toupdate() throws Exception {
		//1.根据id,得到一个对象
		Dept obj = deptService.get(Dept.class, model.getId());
		
		//2.将对象放入值栈中
		super.push(obj);
		
		//3.查询父部门
		List deptList = deptService.find("from Dept where state=1", Dept.class, null);
		
		//4.将查询的结果放入值栈中 ,它放在context区域中
		super.put("deptList", deptList);
		
		//5.跳页面
		return "toupdate";
	}
DeptAction.java update() 更新 先查询原始信息,只保存更新的书写
public String update() throws Exception {
		//调用业务
		Dept obj = deptService.get(Dept.class, model.getId());//根据id,得到一个数据库中保存的对象
		
		//2.设置修改的属性
		obj.setParent(model.getParent());
		obj.setDeptName(model.getDeptName());
		
		
		
		deptService.saveOrUpdate(obj);
		return "alist";
	}
界面-新增

DeptAction.java tocreate() 进入新增页面 jDeptCreate.jsp
public String tocreate() throws Exception {
		//调用业务方法
		List deptList = deptService.find("from Dept where state=1", Dept.class, null);
		//将查询的结果放入值栈中 ,它放在context区域中
		super.put("deptList", deptList);
		//跳页面
		return "tocreate";
	}
jDeptCreate.jsp 上级部门下拉框
 
  	
DeptAction.java insert() 保存
	public String insert() throws Exception {
		//1.调用业务方法,实现保存
		deptService.saveOrUpdate(model);
		//跳页面
		return "alist";
	}
新增时,指定用户状态为1 DeptServiceImpl saveOrUpdate
public void saveOrUpdate(Dept entity) {
		if(UtilFuns.isEmpty(entity.getId())){
			//新增
			entity.setState(1);//1启用  0停用  默认为启用
		}
		baseDao.saveOrUpdate(entity);
	}
删除 DeptAction.java delete() 多选删除
	public String delete() throws Exception {
		String ids[] = model.getId().split(", ");
		
		//调用业务方法,实现批量删除
		deptService.delete(Dept.class, ids);
		
		
		return "alist";
	}
删除时注意级联删除下级部门 DeptServiceImpl.deleteById()
public void deleteById(Class entityClass, Serializable id) {
		//有哪些子部门,它的父部门编号为第二个参数:id
		String hql = "from Dept where parent.id=?";
		List list = baseDao.find(hql, Dept.class, new Object[]{id});//查询出当前父部门下的子部门列表
		if(list!=null && list.size()>0){
			for(Dept dept :list){
				deleteById(Dept.class,dept.getId());//递归调用 
			}
		}
		baseDao.deleteById(entityClass, id);//删除父部门
	}

	public void delete(Class entityClass, Serializable[] ids) {
		
		for(Serializable id :ids){
			this.deleteById(Dept.class,id);
		}
	}
三.认证的传统与BRAC认证方式


BRAC认证方式:
base Role Access Controller :基于角色的访问控制

四.BRAC认证方式下的数据库设计

五.实现用户与用户扩展信息的CRUD 用户 User/baseEntity

抽取与用户扩展信息中的相同属性,放入父类中

baseEntity .java
public class baseEntity implements Serializable {

	protected String createBy;  //创建者的 id
	protected String createDept;//创建者所在部门的id
	protected Date createTime;//创建时间
	protected String updateBy;//更新者的id
	protected Date updateTime;//更新时间
User.java
public class User extends baseEntity{
	private String id;
	private Dept dept;//用户与部门   多对一
	private Userinfo userinfo ;  //用户与用户扩展信息    一对一
	private Set roles = new HashSet(0);//用户与角色   多对多
	private String userName;//用户名
	private String password;//密码  要加密
	private Integer state;//状态
UserInfo.java
public class Userinfo  extends baseEntity {
	private String id;
	private String name;//姓名
	private User manager;//用户与直属领导    多对一
	private Date joinDate;//入职时间
	private Double salary;//薪水
	private Date birthday;  //出生年月
	private String gender;  //性别
	private String station;//岗位
	private String email;//邮箱
	
	private String telephone;//电话
	private Integer degree;//等级
	private String remark;// 备注
	private Integer orderNo;//排序号
User.hbm.xml 用户-部门-用户扩展信息-角色



   
      
         
      
      
      
      
      
      
      
      
      
      
      
     
	
      
      
      
      
      
      
      
      
         
         
      
   

Userinfo.hbm.xml

   
      
         
      
      
  
      
      
      
      
      
      
         

界面-用户列表

界面-查看

界面-修改

界面-新增

用户id generator方式为 assigned UserServiceImpl.saveOrUpdate()
if(UtilFuns.isEmpty(entity.getId())){
			//新增
			String id = UUID.randomUUID().toString();
			entity.setId(id);
			entity.getUserinfo().setId(id);
新增用户 选择所在部门,领导 jUserCreate.jsp

      所在部门:
      
      	
      
  
 	直属领导:
    
    	
    
更新是,用户状态回显 jUserUpdate.jsp
状态:
 
      停用 
      启用 
    
六.实现角色的CRUD Role.hbm.xml 角色与用户 /多对多 角色与模块/多对多

   
      
         
      
      
          
	  
	  
	     
	     
	  
	  
	  
	  
	     
	     
	  
	  
   

Role.java
public class Role extends baseEntity{
	private String id;
	private Set users = new HashSet(0);//角色与用户    多对多
	private Set modules = new HashSet(0);//角色与模块    多对多
	private String name;//角色名
	private String remark;//备注
	private String orderNo;//排序号
界面-列表

界面-新增

七.实现模块的CRUD Module.hbm.xml 模块与角色 多对多

	
	    
	       
	    

	    
	    
	    
	   	    
	    
	    
	        
	        
	    

	


Module.java
public class Module extends baseEntity {
	private String id;
	
	private Set roles = new HashSet(0);//模块与角色   多对多
	private String parentId;  //父模块的编号
	private String parentName;//父模块的名称  冗余  用空间换时间
	private String name;  //模块名
	private Integer layerNum;//层数   
	private Integer isLeaf;//叶子
	private String ico;  //图片
	private String cpermission;//权限
	private String curl;//路径
	private Integer ctype;//菜单的类型:主菜单,左侧菜单   ,按钮
	private Integer state;//状态
	private String belong;//从属于
	private String cwhich;//
	private Integer quoteNum;//引用次数
	private String remark;//备注
	private Integer orderNo;//排序号
界面-列表

界面-新增

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/345259.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号