系统开发权限总结篇

来源:互联网 发布:cf雷神刷枪软件 编辑:程序博客网 时间:2024/05/16 05:50

建立一套完整的软件系统,最开始需要建立权限控制系统。

本人java开发3年多,一直是在混日志,应付工作。最近开始思考软件开发方面的一些问题,今天浅浅的谈一下系统权限控制,经验不足, 算是抛砖引玉,关于系统权限控制方面有更通用更实用的解决方案,请各位评论,指教。下面进入正题:


先介绍一下概念:

用户:使用系统的操作人;

角色:用户拥有角色,然后来体现用户的权限,角色就是一系列权限的集合;

菜单:指的是系统使用人可以看得见的是实在的模块,一般系统有一级菜单,二级菜单;

权限:权限是隶属于菜单的,每个菜单下至少有一个权限(查看权限),当用户拥有的角色包含某个菜单的查看权限之后,用户才能看到这个菜单。其实菜单一般还有其他权限,               比如新增权限,修改权限,删除权限等等。


从上面的概念可以看出,用户拥有某个角色之后,角色里面包含了一系列的权限,那么这些权限就是用户所能看到的菜单以及能操作的功能。要实现对用户的权限控制,就需要通过这些权限实现对菜单展现与隐藏。当有权限时,菜单以及功能就显示。比如有菜单的查看权限,那么菜单就可见,如果有新增权限,新增按钮就hide=false;这样系统就实现了对人员权限的控制。


系统权限控制分文两部分:

1.功能权限控制

2.数据权限控制


功能权限控制:

包括对于菜单的展现与隐藏以及页面(其实页面是最低一级的菜单)中某个按钮的控制。

a.菜单的控制由系统框架实现,用户登录之后系统会先创建根据用户的查看权限,创建一级菜单,然后二级,然后三级一直到最后一级;

   具体实现逻辑:数据库配置菜单名称,菜单上一级菜单编码,当前菜单编码,菜单的先后级别,同时如果菜单是最后一级,需要配置页面路径。用户登录之后根据用户的权限集合有查看权限的菜单都创建出来。

b.按钮权限控制,这一部分是每个页面根据业务需求由不同的业务而定,有每个空能开发控制,不由系统框架控制,对于有些业务来说,可能不需要配置按钮权限。

   具体实现逻辑:当某个功能,比如新增,需要实现权限控制,只能让一部分用户使用的时候,那么将该按钮状态设置为不可见hidden:true。当页面加载完成之后,发送请求到后台获取用户权限列表,如果用户拥有该按钮对应的权限编码,那么设置为按钮可见,这样实现了按钮的控制。


数据权限控制:

数据权限控制是指某个页面中数据的查询让不同的人查的数据范围不一样,比如工单只能查询自己创建的工单。这种权限也是属于业务需求而定,不是由系统框架控制。

对于这一部分权限的控制每个页面都配置至少一个数据查看权限,那就是该页面的数据管理员权限,能查看所有数据,在查询逻辑控制方面:

系统默认为 where 1=0 这样没有配置权限的时候就查询不到数据,再进行该页面查询数据控制的时候,对改页面所有的数据权限一个一个验证用户的权限,采用or连接,比如某个页面有三个数据查询权限:权限A(能查all),权限B(能查当前登录用户创建的数据),当两个权限都有的时候,那么查询语句就是:

where 1=0 or (1=1 or 创建人=loginuser)综合查询结果可以得出,查询结果为所有数据,以为权限A相当于管理员。

如上,如果前台用户还输入了查询条件,采用and连接:

where 1=0 or ((1=1 or 创建人=loinguser)       and   字段a=? and  字段b=? .....),
那么总结一下就是如果系统权限控制产生的查询条件,采用or连接放在一起(放在一起指用括号括起来),然后与用户前台条件全部用and连接放在一起用or 与1=0连接。

1 0