OA系统:权限管理

可以通过不同划分管理权限:分组进行权限管理,根据角色权限管理,根据用户权限管理。

权限中定义的是用户和事情之间的关系,并没有涉及到角色。所以,如果不使用角色也可以实现成员资格管理。但是,角色作为某些用户的集合,这样对制定规格是更为方便、合理,也更符合业务逻辑的客观存在形式。 即:通过角色对用户进行权限管理。

权限管理系统功能分为:授权与认证

4、授权,指将权限授予角色或用户 
   a) 如果用户A拥有角色B、角色C,那么,缺省的情况下,用户A将拥有被分配给角色A和角色C的所有权限(即默认情况下,用户A继承其拥有的角色所具有的所有权限) 
   b) 如果用户拥有多个角色,那么用户的权限是这些角色权限的合集 
   c) 如果用户拥有多个角色,而且角色之间的授权有冲突(比如对同一个资源的同一个操作,一个角色为“允许”,另外一个角色为“不允许”),将以优先级别高的角色为准(所谓优先级别,也就是对于这个用户所拥有的角色而言,是有顺序的,同一个角色在不同的用户那里可能拥有不同的优先级) 
5. 认证,指用户访问资源的某些操作时,根据授权,判断是否允许用户的访问 
  a)在用户访问的时候,需要进行即时的判断(是否有权访问)

员工职位=角色-》设置权限。权限有树形结构

为角色分配权限-》分配子权限,角色也就有父权限。

一、权限有哪些功能:控制哪些用户可以使用哪些功能。
    1,初始化权限
        向数据库插入所有的权限数据,这个操作只在安装做一次。ps:权限没有增删改(因为功能已经开发完)
        插入一个超级管理员用户,这个用户有所有的权限,并且他的权限不可以被修改与删除。
    2,分配权限
        指定哪些用户有哪些权限(某权限就是使用某功能的许可,也就是某URL的访问许可)。
        是给Role分配权限(用户的权限就是用户所有角色的权限的合集)。
    3,使用权限
        1,用户登录后才能使用OA中的功能(登录、注销)。
        2,左侧的菜单是根据权限显示的。
        3,右侧页面中的链接是根据权限显示的。
        4,验证每一个请求的权限,有权限才能访问。
权限= 操作+资源
控制权限---》控制url

二、整体思路
    某权限就是使用某功能的许可,
    一个功能就是一个多个URL(在ItcastOA中有两种情况):
        1,一个功能对应1个URL,例:删除用户功能对应的URL是userAction_delete。
        2,一个功能对应2个URL,例:添加用户功能对应的URL是userAction_addUI(添加页面的显示)与uesrAction_add。
    功能的使用许可,也就是某URL的访问许可。
    分配权限就是指定用户可以访问哪些URL(白名单)
    每个功能应对应一个唯一的名称,以便用户分配权限时看到的是名称,最终关联的还是URL。

    --------- 举例 --------
    资源:用户
    操作:增、删、改、查、初始化密码
    资源+操作 = 权限

    用户增            userAction_addUI, userAction_add
    用户删            userAction_delete
    用户改            userAction_editUI, userAction_edit
    用户查            userAction_list
    用户初始化密码    userAction_initPassword
    -----------------------

 

三、设计实体
    权限分为三级:顶级菜单、二级菜单、右侧页面中的链接。
    选中一个权限时,应同时选中所有直系上级的权限。
    取消一个权限时,应同时取消他所有的下级权限(所有子孙权限)。
    取消同级的所有权限时,就同时取消他们的上一级权限。

 

 

 

  开发思路:

1)用户登录,登录成功后将登录用户放入Session,并将用户对应的角色和角色对应的权限立即查询
2)左侧菜单数据从数据库中获取
    * 通过一个监听器,项目启动时加载权限数据,放入application作用域
    * 用户登录成功之后,直接从application作用域中获取权限数据展示
3)左侧菜单按照登录人的权限展示
    <s:if test="#session.loginUser.hasPrivilegeByName(name)">
4)在数据库中加入超级管理员,在程序中判断如果当前登录用户是超级管理员,就直接显示所有权限菜单
5)右侧连接和按钮按照权限显示

6)编写自定义拦截器,拦截用户的所有针对Action的请求

1,初始化权限:安装时:执行一次--》完成权限数据库的初始化,分配超级管理员

(用户通过批处理文件进行初始化权限数据表文件)

2,权限数据:即菜单栏的显示----》* 通过一个监听器,项目启动时加载所有权限数据,放入application作用域
    * 用户登录成功之后,直接从application作用域中获取权限数据展示

监听器实现:

再web.xml中配置监听器

页面处理:从Session中获取登录用户,根据用户的角色最终获取对应的权限,判断用户的权限是否和当前循环出的权限是否一致,如果一致就显示 

3,右侧连接和按钮按照权限显示

人事管理OA系统 本案例开发环境: 数据库:Mysql IDE :STS3.0 JDk :1.7 Tomcat:7.0 本案例所使用技术: 1、struts2标签 2、jsp页面 3、SSH2 框架 目前完成功能: 1、用户登录判断权限 2、普通用户登录主页详情查看 3、员工考勤查询 4、员工个人薪资查询 5、员工假期申请与查询及修改 6、用户密码修改 2013-08-26 18:48 新完成的模块 1、人事部职员管理职工模块 a、添加职工 b、多种条件查询职工 c、查看职工详情 2013-08-26 18:38 新完成的模块 1、公司部门管理 a、所有部门查询(详情查询) b、部门详情修改 c、查看部门所有员工 d、添加部门 f、修改部门 2、员工考勤管理 a、当天考勤查询 b、所有考勤查询(多条件考勤查询) 问题: 如果action同用全局属性会出现属性上次查询被赋值的情况 正在在解决方案????? 2013-08-28 新完成的模块 1、员工考勤管理 a、职工签到 2、职工加班管理 b、部门加班查询(部门Id条件查询) c、个人加班查询 (员工Id和时间查询) d、添加加班信息 e、修改加班信息 3、职工薪资管理 f、按月查询薪资(部门Id查询) g、薪资发放 4、个人页面(同用普通用户页面) spring 默认注入为单例模式 如有些action不需要刻意在bean标签加入scope="prototype"属性 内部私有属性定义时最好赋初值(尤其字符串)这样对后面判断有益 如果action无法传值 刻意考虑用session传值 2013-08-29 10:19 新完成模块 1、请假管理 a、添加拦截器作为用户登录验证 此案例到此结束!源码中可能有些地方不够细致 没加大数据测试不足之处还请谅解!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值