关于权限管理系统的简单设计和分析

权限管理系统的分类:

从类别上简单分类,分成两类:认证(用来识别用户的身份),授权(根据登录用户的身份给予用户相应的权限)

从控制级别上进行划分,又可以分成4类:1URL级别(粗粒度的权限控制),2方法级别(细粒度的权限控制),3页面级别(通过标签,推荐使用自定义的标签),4数据级别(最细粒度的权限控制)

认证和授权大家顾名思义,可以不用说,来说说那四种控制级别的使用场景和基本实现吧

URL级别:首先说说它的实现原理,它基于filter来实现,我的思路是在请求的时候输入url之后,过滤器进行拦截,对url进行切割,然后根据切割后的地址去数据库中去查当前用户是否具备这个权限,具备就放行,不具备就拦截。说完实现,我们说说为啥URL级别为啥是粗粒度的权限管理,粗粒度是相对于细粒度来说的,filter是可以进行权限管理,但是在整个管理过程中,只负责管理URL的“访问”权限而不会去管URL对应的页面中哪些具体“操作”的权限,例如用户能访问一个页面,但是这个页面中有些功能这个用户没有权限。

方法级别:同样,也说说它的具体实现,如果是基于Spring框架来构建的应用程序,谈到方法级别,首先想到的是AOP编程,通过代理的机制在不改变代码的情况下生成代理类来实现增强的效果,所以我们可以基于SpringAOP编程来实现方法级别的权限控制,可以真正做到细粒度的权限管理。在访问某个方法之前,我们Advice,在Advice中拿到用户的id,根据用户id去查权限。

页面级别:在用户访问页面的时候,通过自定义标签判断这个用户是否具备访问这个页面某些功能的权限,有这个权限就显示,没有就不显示

数据库级别:一个用户,可能对表中A类商品可以进行操作,对B类商品无法进行操作。设计这个表的时候可以在这个表中添加一个权限字段。

权限表的设计:

URL级别的话,需要使用7张表(4+3):这里的4指的是用户表,角色表,权限表,资源表,而3呢指的是四张表之间多对多关系表

方法级别的表设计,只需要5张表(3+2):和URL级别对比,少了资源表和权限资源关系表

我喜欢用ApacheShiro,它虽然是URL级别的权限控制,但是它将资源和权限以及对应关系都整合到配置文件中

猜你喜欢

转载自blog.csdn.net/qsw2lw/article/details/90116050