一般企业上的权限部分,都是区分为功能权限和数据权限。

一、功能权限

功能权限,就是用户登录后,能看到哪些菜单,能看到哪些按钮,能执行哪些操作的权限。
一般,功能权限,已经都有很成熟的业内方案和框架了。
比如有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作为条件查出对应的业务数据。
以上第一步到第五步,都可以作为接口对子类下发,延迟实现,最终执行是第六步。
这样就彻底规范了所有业务的数据权限的使用步骤,各个业务只管实现即可。以上步骤可以微调,看清道理即可。

模板模式,可以参考我之前写过的一篇介绍
[设计模式] ------ 模板模式

注:使用模板模式实现数据权限,个人感觉还不是最优解,之所以使用模板,重在规范各个业务的逻辑规则顺序。

三、总结

做权限,首先要分清功能权限和数据权限的界限,最好不要有交集,不要为了编码方便,将二者揉起来,比如在数据权限的时候,很容易会想到要用功能权限里面的角色的部分,乍一看好像方便了不少,但对于日后维护,以及后面新员工的学习成本,都是很大的,因为一旦揉起来,相当于就把功能权限和数据权限耦合了,我们知道,解耦是项目做大后特别麻烦的一件事,所以能在项目初期避免耦合的,就尽量避免。所以如果项目是团队多人协同开发,大可将功能权限和数据权限交给两个人同时做。各做各的,避免耦合。

浅谈权限(功能权限数据权限)相关推荐

  1. JEECG Framework 3.5.0 GA 新版本终于发布了,重量级功能(数据权限,国际化,多数据源),团队会努力推出新版本,希望大家多多支持!!

     JEECG Framework 3.5.0 GA 新版本终于发布了,重量级功能(数据权限,国际化,多数据源),            今年团队会努力不断推出新版本,希望大家多多支持!! 发布地址: ...

  2. RBAC权限模型及数据权限扩展的实践

    原文:RBAC权限模型及数据权限扩展的实践 话说大家对RBAC权限模型应该是耳熟能详了.但真正用的好的并不多.并且原始的RBAC模型并不包括数据权限的管理,网上也差点儿没有相关的文章可以參考.本人经过 ...

  3. 通过DataEase行列权限设置实现数据权限管控

    在企业的日常经营中,企业人数达到一定数量之后,就需要对企业的层级和部门进行细分,建立企业的树形组织架构.围绕着树形组织架构,企业能够将权限落实到个人,避免企业内部出现管理混乱等情况.而在涉及到数据分析 ...

  4. Unity Android 之 Unity Android 交互(aar形式)动态申请权限功能实现(权限可人为怎加删减,并含代码工程)

    Unity Android 之 Unity Android 交互(aar形式)动态申请权限功能实现(权限可人为怎加删减,并含代码工程) 目录

  5. 浅谈云计算和大数据技术

    浅谈云计算和大数据技术 背景: 随着计算机技术的发展,数据量日益增长,现有技术也很难满足业务的发展需求,在代码的层层迭代和优化之后,还是很难满足数据的增长需求,迫切需要一项新的技术来从事数据计算,因为 ...

  6. 浅谈List保存的数据是引用数据类型的地址

    浅谈List保存的数据是引用数据类型的地址 今天一个初学javaweb的朋友问我一个bug,经过和别人 讨论分析了解到List对象细节上的一些问题,我将代码重新简化构造了一下做成了一个例子.上代码: ...

  7. 浅谈服务器托管至IDC数据中心的优势

    浅谈服务器托管至IDC数据中心的优势 一:网络 企业自建机房一般用的是商务光纤,本质上也是从运营商的数据中心出来的光纤,只是要经过很多交换机跳转后才能到企业的机房,所以出现故障率的概率会高一些.IDC ...

  8. 计算机控制单元的实际应用,浅谈控制单元功能

    浅谈控制单元功能 内容摘要 本文介绍了计算机组成的控制单元的功能内容当中的微操作指令和具体的功能实现讲解.其中微操作指令,包括加法指令.存数取数指令.为进一步分析微操作,将其分为四个阶段,四个阶段包括 ...

  9. 浅谈通过网络和数据来“定位”一个人

    我们在看武侠小说时,总有些高手能飞天遁地,似乎无所不能,然而我们也总能发现那些如影随形的人,他们不分日月,不分四季的追踪.当今社会,也有这样的情况,追逐的战场已经变成了虚拟复杂的网络世界,根据自己的知 ...

  10. 从零开始java数据权限篇:数据权限

    目录 一:数据权限的产生 二:数据权限的数据切割 1.数据对应的层级图 2.用户数据查询 3.用户流程管理 4.部门-岗位-公司查询拓扑图 三.说明 一:数据权限的产生 在一个后管系统中,由2个最重要 ...

最新文章

  1. Android Fragments 详细使用详细介绍
  2. c语言素数个数_C语言试题及答案
  3. 关于spring boot多张表建立外健的讨论
  4. asp 生成html文件,将指定的asp文件内容生成html文件_asp技巧
  5. Python_urllib
  6. IPLAT62--后台返回提示参数
  7. 数据结构与算法学习笔记01-数组
  8. etcher制作mac启动盘_如何在Mac上创建和引导Linux USB驱动器
  9. ElementUI:定制日历Calendar
  10. ubuntu 20.04 pdf viewer 推荐
  11. 股票交易软件接口编程语言
  12. 《ERP原理》期末复习——第一章 初识ERP(企业资源计划)
  13. JAVA疫苗接种预约系统毕业设计 开题报告
  14. 中国计量大学现代科技学院第四届“中竞杯”程序设计校赛(同步赛)F.爬塔
  15. UEFI.源码分析.DXE阶段的执行
  16. Vim 复制 全部复制
  17. 【kali-密码攻击】(5.1.1)密码在线破解:Hydra(图形界面)
  18. weka中的arff格式数据
  19. 《善数者成:大数据改变中国》读书笔记2
  20. java 公交管理系统 代码_java公交线路管理系统

热门文章

  1. 批量替换文件夹下所有文件的内容
  2. python 词云小demo
  3. 正则控制可以输两位小数、负数,整数
  4. C# WebBrowser 设置独立的代理
  5. HDU 5869.Different GCD Subarray Query-区间gcd+树状数组 (神奇的标记右移操作) (2016年ICPC大连网络赛)...
  6. PHP session的工作原理
  7. AspNetPager 修改 然后返回当前页
  8. 用javascript生成指定范围的随机数
  9. 2010年 Web的五项技术和五个趋势
  10. 计算机网络——编码和调制