OA系统需求说明书_初步.doc_第1页
OA系统需求说明书_初步.doc_第2页
OA系统需求说明书_初步.doc_第3页
OA系统需求说明书_初步.doc_第4页
OA系统需求说明书_初步.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要随着网络的高速发展,网络OA系统逐渐受到关注。一些大型企业集团(例如联想、海尔)正致力实现高层次的网络办公自动化,这将为他们节省大量的人力资源,节省大量的办公费用,大幅度提高办公效率。开发网络办公系统的市场前景是广阔的。 OA系统来主要实现的功能有:企业内各种信息资源的共享;加强员工间的交流、提高整体工作效率;为领导各种有用数据,方便领导对公司情况的及时了解、提供决策支持;提供各种工作记录,以备事后查询。该系统采用B/S模式,服务器需要安装MYSQL,客户端值需要通过浏览器可以访问到服务器,降低了客户端的要求。系统采用MVC架构开发模式,用JSP控制视图(VIEW),Servlet充当控制器(Contoller),JavaBean充当模型(MODEL)相关的JSP页面提交数据交给Servlet处理,然后再委托给JavaBean ,最后JavaBean去连接服务器。关键字网络、OA、节省、提供、加强、提高、MVC、MYSQL。第一章:绪论1.1选题背景和意义OA办公化系统,应为翻译为OFFIC AUTOMATION,局域网信息自动化,它利用先进的计算机网络技术,使人的各种办公业务活动逐步转变为由计算机来协助完成。达到充分利用信息,提高工作效率和工作质量。办公系统带来的好处有:a.信息传递与沟通流畅:通过多途径的联络与沟通,减少信息在途时间,提高信息的时效性。b.规范工作管理,提高整体效率:解决了跨域部门多岗位的业务处理诸多问题,有效避免工作中出现的脱节、错办等现象。c.整合信息资源,实现知识管理d:增强凝聚力,提高响应能力:能够培养全员信息化关注参与意识。提高专业素质。1.2系统开发工具和运行环境该系统运行环境需要:Windows操作系统,MYSQL服务器,IE浏览器,JDK。开发工作做药用到Myeclipse和Tomcat.第二章:系统分析2.1系统主要结构体设计a.组织机构树状结构的设计b.授权与认证的设计2.2采用MVC架构实现的项目结构图第三章:系统功能和实现3.1管理主界面主要代码:html,body font: normal 12px verdana;margin: 0;padding: 0;border: 0 none;overflow: hidden;height: 100%;.empty .x-panel-body padding-top: 0;text-align: center;font-style: italic;color: gray;font-size: 11px;.x-btn button font-size: 14px;.x-panel-header font-size: 14px;Ext.onReady( function() /Ext.Msg.alert(ext,welcome you!);var addPanel = function(btn, event) var n;n = tabPanel.getComponent(btn.id);if(n) tabPanel.setActiveTab(n);return;n = tabPanel.add( id : btn.id,title : btn.id,html : ,/autoLoad : ,closable : true);tabPanel.setActiveTab(n);var item1 = new Ext.Panel( title : 组织机构,/html : <empty panel>,cls : empty,items : new Ext.Button(id : Org_list,text : 机构管理,width : 100%,listeners : click : addPanel) ,new Ext.Button(id : Person_list,text : 人员管理,width : 100%,listeners : click : addPanel) );var item2 = new Ext.Panel( title : 权限管理,/html : <empty panel>,cls : empty,items : new Ext.Button(id : Module_list,text : 模块管理,width : 100%,listeners : click : addPanel),new Ext.Button(id : Role_list,text : 角色管理,width : 100%,listeners : click : addPanel),new Ext.Button(id : User_list,text : 用户管理,width : 100%,listeners : click : addPanel) ); );var accordion = new Ext.Panel( region : west,margins : 5 0 5 5,split : true,width : 210,layout : accordion,items : item1, item2, item3,item4,item5);var tabPanel = new Ext.TabPanel( region : center,enableTabScroll : true,deferredRender : false,activeTab : 0,items : title : index,/html : aaaaaaautoLoad : default.jsp );var viewport = new Ext.Viewport( layout : border,items : accordion, tabPanel ););3.2组织机构主要代码: 机构管理 序号 机构名称 机构编号 父机构名称 D操作 C操作 R操作 $org.id $ $org.sn $ 删除 更新 返回 没有找到相应的记录 机构的信息主要包括:名称类型描述机构名称机构编号字符串机构的编号是唯一的;机构的编号是自动生成的,编号的规则是:本机构的编号XX(父机构的编号)_XX(本机构的序号)机构描述3.3人员管理:主要代码: 人员管理 序号 名称 性别 地址 描述 职务 电话 所属部门 删除人员 更新人员 $person.id $ $person.sex $person.address $person.description $person.duty $person.phone $ 删除 更新 没有找到相应的记录 人员的信息主要包括:名称类型描述姓名性别所属部门职务地址电话备注3.4权限管理1、 用户(User)可以拥有多个角色(Role),角色可以被分配给多个用户2、 权限的意思就是对某个资源的某个操作,现在规定:a) 所谓资源,即系统的模块b) 所谓操作,包括:增加、删除、修改、查询等操作3、 权限管理系统的总体功能分为:授权与认证4、 授权,指将权限授予角色或用户a) 如果用户A拥有角色B、角色C,那么,缺省的情况下,用户A将拥有被分配给角色A和角色C的所有权限(即默认情况下,用户A继承其拥有的角色所具有的所有权限)b) 如果用户拥有多个角色,那么用户的权限是这些角色权限的合集c) 如果用户拥有多个角色,而且角色之间的授权有冲突(比如对同一个资源的同一个操作,一个角色为“允许”,另外一个角色为“不允许”),将以优先级别高的角色为准(所谓优先级别,也就是对于这个用户所拥有的角色而言,是有顺序的,同一个角色在不同的用户那里可能拥有不同的优先级)d) 除了可以对角色进行授权外,也可以针对用户进行授权,也就是说,将权限授予用户。针对某个资源的所有操作,我们可以设置这些权限对用户来说是“继承”或“不继承”i. 继承:意思是这些权限将使用其(即用户)所拥有的角色的权限,而不使用其(即用户)单独设置的权限ii. 不继承:意思是这些权限将使用其单独设置的权限,而不使用其所拥有的角色的权限5、 认证,指用户访问资源的某些操作时,根据授权,判断是否允许用户的访问a) 在用户访问的时候,需要进行即时的判断(是否有权访问)b) 应该提供查询的功能,可以查询某个用户所拥有的所有权限总体上,可分为模块管理、角色管理和用户管理模块:3.4.1模块管理:模块管理主界面参考:主要代码: 模块管理 序号 模块名称 模块编号 父模块名称 模块地址 排序号 D操作 R操作 $module.id $ $module.sn $ $module.url $module.orderno 删除 返回 没有找到相应的记录 3.4.2角色管理:可以添加角色信息、删除角色信息以及给角色授权给角色授权,选中其中一个角色,可以打开角色授权界面:在这个界面上,按照两级模块的形式列出系统所有模块,以及在这些模块上面的CRUD(添加、读取、更新、删除)权限;所谓“启用”,意思是本设置有效,否则设置无效!当点击选中其中某个模块的某个权限时,系统自动添加此权限!【选中就开始生效,无需点击提交按钮】主要代码:package com.xzp.oa.manager.impl;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Set;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set; import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.xzp.oa.manager.AclManager;import com.xzp.oa.model.Acl;import com.xzp.oa.model.Permission;public class AclManagerImpl extends HibernateDaoSupport implements AclManager /授权过程 principalType主体类型, principalsn 主体标识,/ resourcesn(模块ID)资源标识, int permission, boolean yes,根据前三者或得acl实例,如果没有的话就new 有的话就upatepublic void addOrUpdatePermission(String principalType, int principalsn,int resourcesn, int permission, boolean yes) /查找一个acl实例存在就更新,不存在就创建Acl acl=(Acl) this.getSession().createQuery(from Acl a where a.principalType=? and a.principalsn=? and a.resourcesn=?).setParameter(0, principalType).setParameter(1, principalsn).setParameter(2, resourcesn).uniqueResult();if(acl!=null)acl.setPermission(permission, yes);this.getHibernateTemplate().update(acl);return;/创建ACL实例 acl=new Acl();acl.setPrincipalType(principalType);acl.setPrincipalsn(principalsn);acl.setResourcesn(resourcesn);acl.setPermission(permission, yes);this.getHibernateTemplate().save(acl);/删除授权public void delPermission(String principalType, int principalsn,int resourcesn) Acl acl=(Acl) this.getSession().createQuery(from Acl a where a.principalType=? and a.principalsn=? and a.resourcesn=?).setParameter(0, principalType).setParameter(1, principalsn).setParameter(2, resourcesn).uniqueResult();this.getHibernateTemplate().delete(acl);/添加或更新用户的继承特性yes表示继承public void addOrUpdateUserExtends(int userid, int resourcesn, boolean yes) Acl acl=(Acl) this.getSession().createQuery(from Acl a where a.principalType=? and a.principalsn=? and a.resourcesn=?).setParameter(0, Acl.TYPE_USER).setParameter(1, userid).setParameter(2, resourcesn).uniqueResult();if(acl!=null) acl.setExtends(yes);this.getHibernateTemplate().update(acl);return;/创建ACL实例 acl=new Acl();acl.setPrincipalType(Acl.TYPE_USER);acl.setPrincipalsn(userid);acl.setResourcesn(resourcesn);acl.setExtends(yes);this.getHibernateTemplate().save(acl);/即时认证过程public boolean hasPermission(int userid, int resourcesn, int permission) /一、 查找直接授权的用户Acl acl=(Acl) this.getSession().createQuery(from Acl a where a.principalType=? and a.principalsn=? and a.resourcesn=?).setParameter(0, Acl.TYPE_USER).setParameter(1, userid).setParameter(2, resourcesn).uniqueResult(); if(acl!=null) /permission代表CRUD int yesOrno=acl.getPermission(permission); /如果授权是确定的就返回授权情况 if(yesOrno!=Acl.ACL_NEUTRAL)return yesOrno=Acl.ACL_YES?true:false; /二、查找不到授权用户,或者用户授权不确定就继续查找用户的角色授权上面的两个if都结束 /按顺序排列的角色 String hql= select r.id from UsersRoles ur join ur.role r join ur.user u+where u.id=? order by ur.orderNo; List aclIds=this.getHibernateTemplate().find(hql,userid); for( Iterator iter=aclIds.iterator();iter.hasNext();) Integer rid=(Integer) iter.next(); acl=(Acl) this.getSession().createQuery(from Acl a where a.principalType=? and a.principalsn=? and a.resourcesn=?).setParameter(0, Acl.TYPE_ROLE).setParameter(1, rid).setParameter(2, resourcesn).uniqueResult(); if(acl!=null) return acl.getPermission(permission)=Acl.ACL_YES?true:false; return false;/搜索某个用户拥有读取权限的模块列表,用于登录显示导航条public List searcheModules(int userid) Map temp= new HashMap();/ 查找授予用户拥有角色的所有权限列表,按优先级从低到高/1查找用户拥有的角色 String hql= select r.id from UsersRoles ur join ur.role r join ur.user u+where u.id=? order by ur.orderNo; List aclIds=this.getHibernateTemplate().find(hql,userid);/2.查找角色拥有的权限列表 for( Iterator iter=aclIds.iterator();iter.hasNext();) Integer rid=(Integer) iter.next(); /权限列表 List acls=findRoleAcls(rid); /把授权昂如临时变量后面角色优先级高 for( Iterator iterator=aclIds.iterator();iterator.hasNext();) Acl acl=(Acl) iterator.next();temp.put(acl.getResourcesn(),acl); /3直接授予用户的授权列表 List acls=findUserAcls(userid); /合并二者 for(Iterator iterator=aclIds.iterator();iterator.hasNext();) Acl acl=(Acl) iterator.next();temp.put(acl.getResourcesn(),acl); /已经获得用户拥有的所有授权(包括直接授予用户的和包含其角色的授权,不继承的,继承的就不管了Set en=temp.entrySet();List ds=new ArrayList();for(Iterator iter=(Iterator) en.iterator();iter.hasNext();)Map.Entry entry = (Map.Entry) iter.next();Acl acl=(Acl) entry.getValue();if(acl.getPermission(Permission.read)!=Acl.ACL_NO)ds.add(entry.getKey();/若无此权限,要在临时数组中删除for(Iterator iter=(Iterator) ds.iterator();iter.hasNext();)Object key=(Object) iter.next();temp.remove(key);/若授权列表为空,则返回0长度的集合if(temp.isEmpty()return new ArrayList();String searchModules=select m from Module m where m.id in(:ids);/用户拥有的读取权限的操作return this.getSession().createQuery(searchModules).setParameter(ids, temp.keySet().list(); /根据角色查找的授权列表,返回列表元素是:ACL实例private List findRoleAcls(int roleid)/根绝类型和角色String hql=from Acl a wher

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论