B/S系统权限组设计方案

记得大二暑假时曾经参加过一个OA系统的开发,在安全方面系统采取对拥有不同操作权限的用户进行分组,也就是权限组或者叫用户组,管理员可以控制用户该做什么,不该做什么,但当时我只是负责其中的考勤系统设计,对这个并没有太多关注。

不过最近想了想,决定进行一点简单的设计。

从关系上看:

l  每个权限组可以包含多个操作,每个操作可以被多个权限组包含,即多对多关系

l  每个权限组可以包含多个用户,每个用户可以属于多个权限组,也是多对多关系

l  操作可以有父操作和子操作(这些不多说)

表与表之间的关系描述如下:

权限组N--1 中间表(权限组操作)1--N 操作

权限组N--1 中间表(权限组用户)1--N 用户

字段名字

字段介绍

类型

外键

 

操作表    operate

Id

主键

Int

 

Operate_name

操作名字

Char255

 

Operate_link

操作链接

Char255

 

operate_userGroup_id 

对应中间表id

Int

外键(中间表(权限组操作))

 

权限组   userGroup

Id

主键

Int

 

userGroup _name

 权限组名字

Var255

 

userGroup_operate_id

对应中间表id

Int

外键(中间表(权限组操作))

 

userGroup _user_id

对应中间表id

Int

外键(中间表(权限组用户))

 

用户   user

Id

主键

Int

 

user_name

用户名

Char255

 

password

密码

Char255

 

user _ userGroup _id

对应中间表id

Int

外键(中间表(权限组用户))

 

中间表(权限组操作)   userGroup _operate

Id

主键

Int

 

userGroup _id

权限组ID

Int

 

operate_id

操作ID

Int

 

中间表(权限组用户)   userGroup _user

Id

主键

Int

 

userGroup _id

权限组ID

Int

 

user_id

用户ID

Int

 

添加一个超级管理员 (adminadmin),具备所有操作权限

l  管理员登录,C操作

l  创建权限组,C操作

l  创建操作,C操作

l  创建用户,C操作

l  向权限组添加操作,C操作

l  为操作分配权限组,C操作

l  向权限组添加用户,C操作

l  为用户分配权限组,C操作

l  当用户进行一个操作时,会向目的地发出对应于该操作的编号ID,目的地接受到这个ID后,首先判断该操作是否在表中存在,若存在就检查该用户所在权限组是否包含此操作,包含则执行此操作

l  此外,对操作,权限组,用户以及用户之间的关系也需要进行动态的管理,例如CRUD

 

测试

用户登录

执行某项操作

根据权限看是否执行成功

用户权限验证流程

B/S系统权限组设计方案_第1张图片

 

J2EE结构中,通常我们可以在控制器如Servlet或者Action来对所有用户的权限进行统一的校验(当然过滤器也是个不错的选择),来对用户操作进行统一的处理,比如说在一个Jsp+Servlet+JavaBeanB/S系统中,通常我们是由Servlet作为控制器的,那么我们就可以设计一个BaseServlet

对里面的doPost(HttpServletRequest request,HttpServletResponse response)这样设计

/**

*  这个doPost方法现在对权限进行校验

*/

Public void doPost(HttpServletRequest request,HttpServletResponse response){

    //获取操作ID

    Int operateId =new ParseRequest().parseInt(request,”operateId”,0);

    //判断该操作是否存在数据库中

If(new OperateService().isExist(operateId)){

    //如果该操作存在于数据库中的话

    //获取用户ID

    Int userId=(UserInfo)request.getSession().get(“USERINFO”).getId();

    //判断该用户是否具备进行该操作得权限

    If(new UserService().is Valid(userId,operateId)){

        //该用户可以进行此项操作

        //转向执行方法

        Execute(request,response);

}else{

    //发生错误,用户无权限进行此操作

}

}else{

    //发生错误,该操作不存在

}

}

/**

*  这个方法将被该类地子类实现,用来接收参数,调用Bean来完成一些操作

*/

Public void execute(HttpServletRequest request,HttpServletResponse response){

}

 

 

现在我们再开发Servlet的时候,只需要继承这个BaseServlet,然后复写Public void execute(HttpServletRequest request,HttpServletResponse response)方法,这样就可以对权限操作进行有效的控制了,当然,笔者这里建议最好你要跳转到的jsp页也采用Servlet进行转发。

你可能感兴趣的:(jsp篇)