权限分析

分析说明
v 每个用户在系统中由一个唯的USERID标识。  
v 用户通过系统登录界面登录系统,系统通过加密算法验证用户身份和判断用户是否已经登录系统。如果登录成功通知Application   preference   service和安全管理系统保存用户登录信息。  
v 角色由用户根据自己的设想的组织机构进行添加设置,提供一个专门的模块用来设置组织机构,用户通过组织机构(定义?部门机构还是后面提到的 "机构是实现和执行各种策略的功能的集合 ")方便地进行角色管理。例如:用户可以通过部门机构来进行角色的管理,部门采用编号分层的方式,编号的每两位为一个层次。例如一级部门编号为两位,二级部门编号为四位依此类推下去直到将全厂部门机构建立树状结构图。这类数据仅为方便用户管理角色而存在,在系统的其他方面不存在任何意义。  
v 每个角色在系统中也是由一个唯一角色编号来标识,同时必须保存用户所设置的机构信息,一般来说每个角色只需要保存自己所在机构的代码即可。
(二)菜单控制
需求
此菜单乃系统业务功能菜单。由业务功能模块列表和用户菜单定制共同组成。每个用户可以拥有自己的菜单,也可以直接采用角色缺省菜单(当用户同时充当多个角色并且权限重复时,重复的权限仅一次有效)
分析说明
v 为了方便用户进行权限组织管理,需要在系统中建立一张业务功能模块列表,在用户界面上表示为树状分层结构。  
v 业务功能模块以用户定制菜单来体现,仍然采用编号分层方式,编号的每两位为一个层次。并标明一个层次是子菜单还是业务模块,子菜单只有一种可否被访问的权限设置,业务模块权限由系统管理员或授权用户进行设置。对每个业务模块设置它的对象控制、记录增删改控制和记录集控制。当用户拥有对业务模块的某一权限时,必需对处于它上级的子菜单有可被访问的权限。删除某一个级子菜单时将提示用户他的下级菜单与功能模块都将被删除掉。  
v 当用户同时充当多个角色并且权限重复时,重复的权限仅一次有效,用户拥有他充当的所有角色的权限的并集。  
v 用户与角色拥有的系统权限查询时以业务功能模块列表的树状结构显示出来。  
(三)对象控制(现在未到达此阶段)
需求
对象是指应用系统窗口中的可视对象,如菜单项、按钮、下拉列表框、数据编辑控件及数据编辑控件的字段等。对象控制通过角色与用户授权来实现。
对象控制包括对对象属性的控制可对数据编辑控件中的数据记录的维护权限:
v 对象属性:使能/禁止、可视/屏蔽  
v 记录维护:增加、删除、修改的组合  
分析说明
v 将每个业务模块可进行属性设置的对象由程序员事先设定或由售后技术支持工程师指导用户加入。  
v 在系统管理员或授权用户进行设置业务模块的每种权限时,设置用户在拥有该业务模块这种权限时的对象属性。没有设置属性的对象在保存对象信息的时候,用户权限信息中不被保存。  
(四)记录集控制
需求
记录集的控制是通过条件设置来实现,因此,需要控制记录集的数据库表需要设置专门的记录集筛选字段,而筛选条件由用户根据岗位自进定义,建立过滤表,统一管理。
分析说明
1. 在对用户设置业务模块权限时,同时在过滤表中设置本模块的数据编辑控件的数据筛选条件,筛选条件是组成SQL语句的WHERE条件子句迫使当前访问的模块根据筛选条件对数据编辑控件的SQL语句进行重组,并检索数据。  
2. 当存在需要从数据库中多个表取数据的情况时,过滤表中存在多条记录,每一条记录记录一个数据编辑控件取数的筛选条件。  
3. SQL语句的WHERE子句的生成与校验可以通过的SQL语法分析服务,利用对象所提供的函数分析SQL语句,截取WHERE条件子句,校验新组合的SQL语句的合法性。
(五)权限分布管理
需求
上述提到的权限管理内容应该满足既可集中管理,也可分散管理的目标。
分析说明
1. 权限管理由系统管理员集中管理,系统管理员工作负担过大,难对所有岗位的分工有全面和具体的了解,对权限作出标准细致的划分,对于大型的管理系统适合于把一部分设置权限的交由一些比较高级的用户来进行,有利于各岗位细致协调的工作。这就是权限的分散管理。  
2. 要实现权限的分散管理,就须对授权模块进行一些授权管理,这要求整个系统的授权安全管理工作要做到细致,不要出现权限的漏洞使一些高级用户拥有过大的权限。

 

在用户登陆时,设置2个session
session.setAttribute( "login ", "true ");//简单的判断登陆状态,可以在表里做个字段,登陆时改那个字段的值也可以;
session.setAttribute( "userGroup ", "admin ");//登陆时根据表里的用户组ID,来定义不同的SESSION值;

在一个类文件中定义一个获取用户组信息的方法:
public   String   checkUserGroup(int   userGroupID){
String   msg=null;

switch(userGroupID){  
case   0:   msg   =   "admin ";break;
case   1:   msg   =   "user ";break;
default   :   msg   =   "guest ";//可以根据需求加用户组
}
return   msg;
}
}//end   checkUserGroup  

在登陆的servlet或JSP页里使这个方法就可以得到相应的组名了;用这2个SESSION值来判断用户的状态和组;

再写一个filter,doFilter方法大致如下
public   void   doFilter(final   ServletRequest   req,final   ServletResponse   res,FilterChain   chain)throws   IOException,ServletException
{
HttpServletRequest   hreq   =   (HttpServletRequest)req;
HttpServletResponse   hres   =   (HttpServletResponse)res;
HttpSession   session   =   hreq.getSession();
String   isAdmin   =   null;

try{
isAdmin   =   (String)session.getAttribute( "userGroup ");//获得页面的session值
if(!(isAdmin==null)   &&   isAdmin.equals( "admin ")   ){//判断其是管理员则放行;
chain.doFilter(req,res);
}else{
System.out.println( "is   not   admin ");//测试使
hres.sendRedirect(error_page.jsp);
}
}catch(Exception   e){
e.printStackTrace();
}
}//end   doFilter

写好过滤器后,去项目的web.xml里进行filter的设置,设置其要进行保护的文件夹:
<filter>
<filter-name> CheckAdminGroup </filter-name>
<filter-class> bookshop.filter.CheckAdminGroup </filter-class>
</filter>
<filter-mapping>
<filter-name> CheckAdminGroup </filter-name>
<url-pattern> /admin/* </url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name> CheckAdminGroup </filter-name>
<url-pattern> /secret/* </url-pattern>
</filter-mapping>

这样你在admin,secret里的所有资源,就都被这个过滤器保护起来了,一个过滤器可以对多个资源进行保护,你就按这样的思路,再写个判断用户是否登陆,和一个用户是否属于用户组的过滤器,就实现权限分级了;

 

 

权限的分配可以分按具体的功能分配和按资源的分配,建一个专门的用户权限对应表用以存放每个用户的相关权限.功能的分配是用户的可进行操作的项,资源的分配就是用户具体操作涉及到数据库中数据时的限制(比如说id <100的系统参数普通用户不可改等限制).功能的分配可以提供功能树链接来面向用户,当然连接得通过action来转入以避免用户直接打url就可进入,资源的分配也得建一个表,用于确定用户对于某个功能的数据操作限制.
        还有为了便于管理,最好有角色作为权限的载体,一个用户实际的权限可以这样组成:专门分配给他的和他所具有的所有角色的权限合集.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值