数据权限设计(原创)

数据权限是针对数据表中行级和列级的控制,相对操作权限,颗粒度更细,复杂度更高,因为在项目中也有相关需求,是直接通过硬编码sql查询条件控制的,
后期维护起来比较困难。所以有了一些想法,后期也将在本人springBoot框架中实现。下面细说下我的一些想法:
一、行级权限(数据范围)
1、应用场景:部门查询范围、区域查询范围、只能查看本人订单等
2、实现方式:一般只能通过where条件去控制,但通过硬编码方式,灵活度和维护度不高,建议通过按角色增加数据权限,达到和功能权限统一
3、具体实现(操作建议开发人员或DB人员维护)
建一个行级权限范围控制表 userId(用户id)、sql_id(mapper方法名)、type(控制类型:1-本部门 2-包含下级部门 3-本用户)、isUsed(是否使用)、otherWhere(其他条件语句可添加其他字段的范围)
功能实现:在用户页面添加按钮数据权限,双选项卡(行级数据、列级数据)、行级数据录入上述表中的字段
本人用的mybatis,使用拦截器拦截到sql,首先判断行级权限是否启用,判断sqlId是否匹配。判断类型,本部门则查询登陆用户所属部门,
包含下级部门则需要使用递归,本用户则查询当前登陆用户的(这里建议设计所有表都有这个字段create_user,这样才能按部门或用户控制表数据)
如果otherWhere不为空,则继续追加这个查询条件
二、列级权限
1、应用场景:价格字段、身份证号、密码等敏感字段
2、实现方式:页面循环列控制显示,比如jqgrid、datatables等,都是循环cols,在循环时通过标签控制,标签判断如果为true,则显示该标签包含内容,反之,不显示
3、功能实现:
同样,先建一个列级权限范围控制表userId(用户id)、table_id(页面tableId),type(控制类型:1-本部门 2-包含下级部门 3-本用户)、isUsed(是否使用),hideCols(配置隐藏的列,和dataTables的columns字段相同,可用逗号分割)
在用户数据权限的“列级数据”选项卡,先选定按部门、含下级部门、用户,录入多个隐藏的列用逗号分隔,注意id不能隐藏,保存
页面表格列控制,本人这里使用的是shiro权限框架,前端用的thymeleaf+datatablse, 所以用直接用shiro自定义标签(其它可用自定义标签实现),标签功能传参table_id,col_id,根据登陆用户id、table_id、col_id,isUsed=1查询 count>0返回false,col不显示
补充:上述建的行级控制和列级控制两张配置表可放到redis缓存中,提高查询性能
通过这种方式,可先只做功能权限,不考虑数据权限,如果有客户需求,可通过需求进行配置开发,这样改动的代码量相对较小,而且通过拦截器实现的,不影响整个后台的逻辑代码,而且便于后期的统一维护和更改

这里只是目前本人的实现思路,如大家有更好的实现方式,可分享,跟大家一起进步~~~

转载于:https://www.cnblogs.com/bao666/p/9035076.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397974.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python文件操作实验总结,[干货分享]Python文件操作技巧总结

引言小伙伴们,今天给大家讲解一下python程序下的文件操作完整技巧梳理,都是笔者总结的干货。通过本文阅读,不仅可以带来生产力提升,也可以开发小脚本为生活带来乐趣。首先不知道大家对python有没有了解,不太会用的小伙…

触摸事件

•如果想监听一个view上面的触摸事件,之前的做法是自定义一个view实现view的touches方法,在方法内部实现具体处理代码•通过touches方法监听view触摸事件,有很明显的几个缺点必须得自定义view由于是在view内部的touches方法中监听触摸事件&am…

7价 半导体掺杂_天津大学封伟团队:新型半导体二维原子晶体锗硅烷材料的带隙调控...

xxxxxxxxxxxx【研究背景】xxxx新型二维半导体原子晶体兼具原子级厚度、纳米级层状结构、极高的载流子迁移率,是构建未来高性能纳米光电器件的核心材料。带隙是二维半导体电子器件和光电子光器件中最重要的基本参数之一,是影响二维半导体电子器件开关比和…

面向对象下

面向对象下 多态的定义是什么? 在同一个方法中,参数的类型相同但是由于运行的环境不同而表现出来的不同形式。(父类引用指向子类对象) 什么叫对象转型,什么叫向上转型,什么叫向下转型? 向上转型…

vs2017怎么安装python包,vs2017安装pygame,vs2017安装python第三方包

vs2017有独立的python环境;所以想在vs2017开发python并使用第三方包,需要在vs2017中操作,完成第三方包的安装。一,查看vs2017有哪些版本的python,当前使用的是哪个版本工具--》Python--》Python环境可以看到vs2017包含…

基于opencv在摄像头ubuntu根据视频获取

基于opencv在摄像头ubuntu根据视频获取 1 工具 原料 平台 :UBUNTU12.04 安装库 Opencv-2.3 2 安装编译执行步骤 安装编译opencv-2.3 參考http://blog.csdn.net/xiabodan/article/details/23547847 提前下载OPENCV源代码包 官方&am…

yum 安装 phpmyadmin

1.安装apache yum -y install httpd httpd-devel 2.安装phpmyadmin yum -y -install phpmyadmin 3.配置phpmyadmin 修改/etc/httpd/conf.d/phpmyadmin.conf <Directory "/usr/share/phpmyadmin"> Order Deny,Allow # Deny from all Allow from All <…

我机器人里面的匡威照片_威尔史密斯在《我,机器人》里面穿的是匡威的那款鞋啊...

匡威的经典款&#xff0c; 有高帮跟低帮的&#xff0c;我见有人买过款号&#xff1a;NS05-V085 货号&#xff1a;15087006 性别&#xff1a;中性 零售价&#xff1a;338 尺码&#xff1a;3-11 上市时间&#xff1a;2005.01.01/02.01 材质&#xff1a;牛皮 颜色&#xff1a;黑 的…

Flask构建微电影(二)

第三章、项目分析、搭建目录及模型设计 3.1.前后台项目目录分析 微电影网站 前台模块后台模块前台&#xff08;home&#xff09; 数据模型&#xff1a;models.py表单处理&#xff1a;home/forms.py模板目录&#xff1a;templates/home后台&#xff08;admin&#xff09; 数据模…

Android Studio开发第四篇版本管理Git(下)

前面一片介绍了在as下如何关联远程仓库&#xff0c;这篇就介绍在开发过程中怎么应用。 提交Push 如果本地开发代码有改动了或者你觉得某功能做完了&#xff0c;你打算把改动代码提交到远程仓库&#xff0c;这个时候很简单&#xff0c; 还是在工具栏找到VSC箭头朝上的按钮。 这时…

容器大小_无根容器内部结构浅析

随着云计算的发展&#xff0c;容器变得越来越流行&#xff0c;同时也产生了实现容器的新方案&#xff0c;其中之一就是无根容器。本文介绍了无根容器的内部结构&#xff0c;并分析了无根容器网络组件中的漏洞。随着云计算的发展&#xff0c;容器变得越来越流行&#xff0c;同时…

windows7使用Sphinx+PHP+MySQL详细介绍

安装&#xff08;Windows&#xff09; 1.官方下载 Sphinx下载地址&#xff1a; 下载 2.解压并重命名 此处下载版本为3.0.3&#xff0c;将 sphinx 文件夹命名为sphinx 3.文件夹目录介绍 sphinx --api(各语言支持的api) --bin&#xff08;二进制程序&#xff09; --doc&#xff0…

php layout布局文件,layout(布局) - jQuery EasyUI中文文档 - EasyUI中文站

Layout(布局)使用$.fn.layout.defaults重写默认值对象。布局容器有5个区域&#xff1a;北、南、东、西和中间。中间区域面板是必须的&#xff0c;边缘的面板都是可选的。每个边缘区域面板都可以通过拖拽其边框改变大小&#xff0c;也可以点击折叠按钮将面板折叠起来。布局可以进…

Bootstrap系列 -- 11. 基础表单

表单主要功能是用来与用户做交流的一个网页控件&#xff0c;良好的表单设计能够让网页与用户更好的沟通。表单中常见的元素主要包括&#xff1a;文本输入框、下拉选择框、单选按钮、复选按钮、文本域和按钮等。其中每个控件所起的作用都各不相同&#xff0c;而且不同的浏览器对…

python excel centos_centos中使用python遇到的几个问题

用python搞了一个从excel中读取cobbler节点信息并加入cobbler中的脚本&#xff0c;运行的过程中出了不少问题&#xff0c;这里记录下来&#xff0c;方便日后查找&#xff01;一、yum install python&#xff0c;我通过这个命令安装python&#xff0c;默认安装的是2.6的版本&…

oracle集群监听启动,在RAC中lsnrctl和srvctl操作监听区别

朋友今天询问了一个问题RAC中使用srvctl 操作监听和lsnrctl 操作监听结果不一样&#xff0c;下面我通过实验说明问题0.listener.ora文件内容LISTENER_RAC1 (DESCRIPTION_LIST (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST rac1-vip)(PORT 1521)(IP FIRST))(ADDRESS (PROTO…

how to use webpart container in kentico

https://docs.kentico.com/k11/developing-websites/developing-websites-using-the-portal-engine/using-web-part-containers Webpart Container webpart container中的orangebox, SELECT * FROM dbo.CMS_WebPartContainer WHERE ContainerDisplayName LIKE %orange%; 把…

IE通过推理IE陈述的版本号

样例&#xff1a; 1. <!--[if !IE]> 除IE外都可识别 <![endif]--> 2. <!--[if IE]> 全部的IE可识别 <![endif]--> 3. <!--[if IE 5.0]> 仅仅有IE5.0能够识别 <![endif]--> 4. <!--[if IE 5]> 仅IE5.0与IE5.5能够识别 <![endif]--…

自己调试接口遇到的错误记录

200 请求成功500 请求失败 失败原因在http body里面403 未认证404 服务未找到 转载于:https://www.cnblogs.com/ruixin-jia/p/5734767.html

excel如何找到高频词_拟录取后:应届生和往届生档案哪里找;重灾院校区;高频词背诵表...

今日消息1、应届生和往届生档案哪里找&#xff1f;2、重灾院校区3、考研云督学班高频词背诵表汇总1、应届生和往届生档案哪里找&#xff1f;往年这个时候论文答辩、复试已经结束&#xff0c;已经进入毕业季&#xff01;现在你们毕业答辩结束了吗&#xff1f;你们都顺利上岸吗&a…