手机网站建设万网,html代码中,ds216j做网站,wordpress主动推送代码写在哪里一般企业上的权限部分#xff0c;都是区分为功能权限和数据权限。
一、功能权限
功能权限#xff0c;就是用户登录后#xff0c;能看到哪些菜单#xff0c;能看到哪些按钮#xff0c;能执行哪些操作的权限。 一般#xff0c;功能权限#xff0c;已经都有很成熟的业内方…一般企业上的权限部分都是区分为功能权限和数据权限。
一、功能权限
功能权限就是用户登录后能看到哪些菜单能看到哪些按钮能执行哪些操作的权限。 一般功能权限已经都有很成熟的业内方案和框架了。 比如有RBAC思想Role-Based Access Control基于角色的访问控制。 有三个概念用户角色资源。 用户就是用户给用户配置角色给角色配置资源这些菜单的访问权限就是资源。 这样一来五张表就够了。用户表角色表资源表用户角色关系表角色资源关系表。 一般业内方案有这几种
1、基于shiro框架
这个框架把登录验证功能权限都做了是一个经典的成熟的轻量级的框架。适合与spring集成但不仅仅限于spring框架。 shiro初衷只是为单体应用提供方便但随着热度增加现在不管是单体应用还是分布式集群都可以网上有大段大段的介绍我这就不说这个了可以自行去找。
2、基于spring-security框架
这个顾名思义spring全家桶的成员与spring是无缝对接但量级偏重学习成本比shiro要大而且常用功能方面相比shiro也没有过多优势所以现在应该很少有用这个的能用这个的都用shiro了。
3、其他方案
可以看下我之前写的一个方案基于aop和注解做的适合新手练习只提供一个思路。 一个简单的权限系统模型
二、数据权限
数据权限就是控制用户能看到哪些数据不能看到哪些数据。比如部门负责人默认只能看见自己本部门下的数据隔壁部门的一些数据一般是看不了的。 数据权限由于和业务紧密关联所以业内一直也没有一个统一的框架或者方案一般都是硬编码我仅仅也是根据我遇到过的场景提出一种稍微能规范化的思路纯个人想法仅供参考。
那就是使用设计模式中的模板模式通过使用一个抽象类去定义好骨架然后针对不同业务子类将自己的实现补上就行。 一般骨架的步骤如下就拿用户只能看自己部门相关数据的这个权限举例 前提一般业务数据不会在数据上直接标注属于哪个部门因为部门架构一直会变甚至会大变所以一般都是在业务数据上挂的是责任人。 而且一般数据权限还要满足可配置就好比得有一个配置能指定让A部门的人也能看到B部门的数据这种算特殊情况我们得有个表去维护记录。 1、拿到用户的这个部门 2、拿到这个部门下的所有员工集合{a,b} 3、拿到特殊情况下对应的所有员工集合{c,d,e} 4、将上两个集合合并作为默认情况下的员工集合A{a,b,c,d,e} 5、拿到本业务数据中所有的责任人集合B{a,b,c,x,y,z}并与上面集合A合并找出B集合中包含A集合的数据集合我们叫最终集合C{a,b,c} 6、最后用员工集合C作为条件查出对应的业务数据。 以上第一步到第五步都可以作为接口对子类下发延迟实现最终执行是第六步。 这样就彻底规范了所有业务的数据权限的使用步骤各个业务只管实现即可。以上步骤可以微调看清道理即可。
模板模式可以参考我之前写过的一篇介绍 [设计模式] ------ 模板模式
注使用模板模式实现数据权限个人感觉还不是最优解之所以使用模板重在规范各个业务的逻辑规则顺序。
三、总结
做权限首先要分清功能权限和数据权限的界限最好不要有交集不要为了编码方便将二者揉起来比如在数据权限的时候很容易会想到要用功能权限里面的角色的部分乍一看好像方便了不少但对于日后维护以及后面新员工的学习成本都是很大的因为一旦揉起来相当于就把功能权限和数据权限耦合了我们知道解耦是项目做大后特别麻烦的一件事所以能在项目初期避免耦合的就尽量避免。所以如果项目是团队多人协同开发大可将功能权限和数据权限交给两个人同时做。各做各的避免耦合。