两个关于权限设置的问题思考

最近这两天做动态菜单和权限校验,想到了两个有意思的问题。

第一个是对于一个用户的操作权限,无非就是这四个方面,增删改查。

如果通过字母来标识,可能就是增(I)删(D)改(U)查(S)

那么一个用户或者表所拥有的权限就可能有IS,IDUS,IDU类似这样的组合,其实如此一来会把我们已有的方式打乱,因为4个元素的组合,考虑到顺序,其实有很多,比如2个连续,3个连续,顺序不一样。

所以如果使用一个字段来校验区别,采用字符的形式,其实还是很难,很容易出错,比如ISU, SUI都代表的是一个含义,但是有多种组合方式。

或者换个思路,如果我使用4个字段来区别校验,分别为增删改查,问题似乎会迎刃而解,事实上我们就需要在4个字段间进行大量的组合,语句可能会很啰嗦。有的同学想使用类似 in ('select','insert','delete','update')的形式来校验,但是显而易见,这种方式无法定位边界,比如select+insert+update和select+insert+update+delete在上面的情况都会正常返回结果。

所以能不能用一个字段来标示这个问题呢,我想了一个。

比如增删改查,按照权重,其实应该是select,insert,update,delete这样的权重,如果我们制定为1,2,3,4的话,很容易混淆,比如是4,可能是1+3,4的组合,这样就不好判断到底是拥有哪些权限。

所以我们需要区别对待,借用了人民币的思路。人民币我们知道有1元,两元。五元,十元。所以我们按照这个方式来组合就会好很多,权重值为:

select(1)

insert(2)

update(5)

delete(10)

但是实际上权限在业务中是有组合关系的,会有如下的几种组合。

比如

select

insert+select

delete+select

update+select

select+insert+update

select+insert+update+delete

其实组合就这些,按照权重组合就是:

select 1

insert+select 3

delete+select 11

update+select 6

select+insert+update 8

select+insert+update+delete 18

所以我们得到一个数字,就知道它确切的权限了,在做处理的时候就很容易了。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2018-01-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏YG小书屋

ES-Spark连接ES后,ES Client节点流量打满分析

71530
来自专栏开发 & 算法杂谈

MultiRace-Efficient on-the-fly data race detection

     最近在研究数据竞争检测方法,之前的工作是参考了Eraser这个工具1997年提出的基于Lockset方法的动态数据检测,

9420
来自专栏智能大石头

STM32/GD32上内存堆栈溢出探测研究

无数次遭受堆栈溢出折磨,随着系统变得复杂,故障点越来越难以查找! 主要溢出情况如下: 1,一般RAM最后两块空间是堆Heap和栈Stack,堆从下往上用,栈从上...

26870
来自专栏刘笑江的专栏

iOS 私有 API 调用检测机制探讨

最近发现部分 App 以字符串拼接的方法调用私有 API,在提交 AppStore 审核后被发现打回修改的案例。

66240
来自专栏深度学习之tensorflow实战篇

dataframe插入数据报错SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a

SettingWithCopyWarning 解决方案 场景 问题场景:我在读取csv文件之后,因为要新增一个特征列并根据已有特征修改新增列的值,结果在修改的时...

42680
来自专栏分布式系统和大数据处理

C#网络编程(同步传输字符串) - Part.2

在与服务端的连接建立以后,我们就可以通过此连接来发送和接收数据。端口与端口之间以流(Stream)的形式传输数据,因为几乎任何对象都可以保存到流中,所以实际上可...

13030
来自专栏kangvcar

MongoDB 入门极简教程

11710
来自专栏肖蕾的博客

第十三章:图片资源打包器(TexturePacker)TexturePacker介绍TexturePacker 下载使用TextureAtlaspack文件格式

1.介绍:TexturePacker 是一款把若干张资源图片拼接为一张大图的工具。 2.特点: - 1.提高载入速度 把小图拼接成一张大图,一次载入,减少...

20140
来自专栏雪胖纸的玩蛇日常

老男孩Python全栈开发(92天全)视频教程 自学笔记17

19450
来自专栏光变

1.2 ASM-简介-概览

ASM的作用是生成、转换和分析已经编译的Java类(Java字节码),将其替换成byte数组 (因此转换后的Java类可以被存放在硬盘上或者加载到JVM中)。为...

9220

扫码关注云+社区

领取腾讯云代金券