掌桥专利:专业的专利平台
掌桥专利
首页

一种用于权限存储及验证的优化方法及优化系统

文献发布时间:2023-06-19 16:04:54



技术领域

本发明属于权限存储和验证技术领域,涉及一种用于权限存储及验证的优化方法及优化系统。

背景技术

在大部分的应用系统中,权限存储和验证是其重要的一个模块,在微服务及云原生大行其道的今天,其地位变得愈加重要。但截至目前绝大部分应用系统仍然使用传统的存储及验证方式。传统的权限存储方式一般为数据库的方式,数据结构如下:

【系统模块表】

模块ID、模块名称

【系统权限表】

权限ID、模块ID、权限名称

【用户权限表】

用户ID、权限ID

传统权限验证方式为:先从用户权限表中获取用户所有权限ID列表,如果待验证的权限存在于用户权限列表中则验证通过,否则验证不通过,这种方式最大的弊端就是浪费存储空间,同时验证效率低下,详细如下描述:

传统的权限存储方式:首先将每一个模块按照名称编号,然后存入数据库中,假设系统有256个模块,每个模块包含ID和名称两个字段,ID占1个Byte,名称最大长度为20则需要占用60个Byte(UTF-8编码),那么256个模块则需要占用:256*60=15360Bytes=15KB,而权限表包含权限ID、模块ID、权限名称字段,每个模块约40个权限,其中权限ID占用2个Byte,模块ID占用1个Byte,权限名称最大长度为20则需要占用60个Byte,因此总共占用256*40*63=645120Bytes=645KB,一个用户最多可以拥有256个模块的40个权限则占用空间为:256*40*2=20480Bytes=20KB。使用这种传统的方式将占用大量的空间,例如如果一个系统中有10W用户,用户权限信息表将占用2GB的存储空间。

传统的权限验证方式:首先获取用户登录成功后的用户ID,然后根据用户所请求的资源权限ID查询【用户权限表】,如果能查到说明该用户拥有该资源权限并且放行,否则说明该用户没有该资源权限然后抛出异常。该过程每一次请求资源权限则需要查询一次数据库,不仅效率低下,而且会消耗磁盘I/O,且在高并发下会出现性能瓶颈。之后的改进方法为:第一次用户登录成功后将该用户的所有权限ID查询出来并且缓存到内存中供以后的权限验证查询使用,但这种方式需要遍历整个List,假设一个用户拥有256个模块,每个模块拥有40个权限,则整个List大小为10240,遍历及比较的时间约为:10ms,显然这种验证效率仍然较低。

发明内容

为了解决现有技术存在的不足,本发明的目的是提供一种用于权限存储及验证的优化方法。本发明作为一种通用的解决方案,不局限于特定业务领域及应用范畴,可以嵌入到任何需要权限存储及认证的软件系统中,可以广泛应用于金融、科技、仓储物流、在线商城、物联网等多种领域。

本发明提出了这种高效且廉价的存储及验证方法,不仅节约了存储空间也提高了系统的运算效率。

本发明结合二进制存储的特点将其应用在权限存储及验证这一特定领域,不仅提高了存储利用率而且会大大提高了权限验证效率,以下分别对存储方法和验证方法进行说明。

计算机中数据以二进制方式存储,且以与、或、非方式完成运算,本发明利用这一特性完成权限数据存储,具体算法如下:将模块+权限以二进制BIT位方式存储,使用8个Byte来存储一个模块+权限,二进制表示如下:11111111 11111111 11111111 1111111111111111 11111111 11111111 11111111,其中高8位代表模块,因此可以保存2^8=256个模块,低40位表示页面内的操作权限,而中间的16位则用作保留扩展位,可根据实际情况进行模块或者权限位数的偏移扩展,每一个BIT位1表示拥有该权限,0表示无该权限,从而可以保存40个操作权限,因此一个8Byte的数字可以表示256个模块,每个模块可以拥有40个操作权限。

举例如下:假设某一应用系统A(后面简称系统A)有一个用户管理模块,该用户管理模块拥有:添加、编辑、删除、重置密码、导入、导出6个操作权限,按照设定的二进制表示方法:高8位表示模块编号,即从1–256代表系统A的所有模块,本发明将用户管理这一模块编号为1,二进制表示为:00000001,低40个BIT位表示操作权限,本发明将添加、编辑、删除、重置密码、导入、导出这6个操作权限依次从最低位排列占6个BIT位,最终该模块权限的二进制表示为:00000001 00000000 00000000 00000000 00000000 00000000 0000000000111111,转换成10进制为:72057594037927999,这是系统A中用户管理模块拥有全权限的一种情况,按照设定的二进制表示方法,1表示拥有权限,0表示无权限,因此用户管理模块中这6个权限的排列组合将有

按照以上方法,仅仅使用一个8字节(Byte)的数字就可以存储256*40=10240个权限,以及2^64=18446744073709551616种组合方式,这不仅大大节约了存储空间也可以满足绝大多数应用系统的权限存储需求。

按照上述存储算法存储权限后,验证权限时,只需要将用户拥有的权限值和具体权限做AND操作后,如结果值为1则表示用户拥有该权限,为0则表示用户无此权限。

以下仍以系统A举例,假设系统A有一个用户管理模块,该用户管理模块拥有:添加、编辑、删除、重置密码、导入、导出6个操作权限,现在假设有一个用户B,仅仅赋予他用户管理模块中添加、删除的权限,那么按照权限存储方法中的约定,模块编号为1,从低BIT位开始前6位分别表示添加、编辑、删除、重置密码、导入、导出,有权限为1,无权限则为0,因此可以计算出二进制数字为:00000001 00000000 00000000 00000000 00000000 0000000000000000 00000101。当需要验证用户B是否拥有用户管理模块的添加权限时,计算方法如下:

00000001 00000000 00000000 00000000 00000000 00000000 0000000000000101(用户权限值)AND

00000001 00000000 00000000 00000000 00000000 00000000 0000000000000001(模块权限值)=1

按照算法约定,当结果为1时表示拥有此权限,为0时表示无此权限,此时结果为1表示用户B拥有用户管理模块的添加权限。

同理,验证用户B是否拥有用户管理模块的编辑权限时,计算方法如下:

00000001 00000000 00000000 00000000 00000000 00000000 0000000000000101(用户权限值)AND

00000001 00000000 00000000 00000000 00000000 00000000 0000000000000010(模块权限值)=0

此时结果为0表示用户B不拥有用户管理模块的编辑权限。

图1为应用系统的权限验证流程,本发明要讨论的是权限控制这一环节,在应用系统中可以先将用户权限存储于数据库中,这里仅仅需要一个字段,而无需存储整张表,判断权限的时候仅仅需要先将该权限固定值和用户已拥有权限做AND操作,结果为1表示拥有权限,为0则无此权限。

数据库建议存储结构如下:

【用户权限表】

用户ID,模块权限值(8位整型,一般为LONG型)

建议权限验证逻辑如下:

当用户登录成功后,先获取用户权限值(8位整型数字)再将其缓存至内存中,当验证权限时直接将待验证权限值和模块权限值(已缓存)做AND操作,结果为1则表示用户拥有此权限,反之则表示无此权限。

本发明还提供了一种运行上述优化方法的优化系统。

所述优化系统包括:模块和权限读取模块、模块和权限编号模块、二进制运算模块、运算结果输出模块;

所述模块和权限读取模块用于读取应用系统和用户权限表中的模块和权限的数量和种类;

所述模块和权限编号模块用于将读取获得的模块和权限按照设定的存储逻辑进行编号;

所述二进制运算模块用于将应用系统中待验证的用户权限值和已缓存在内存中的模块权限值做AND操作;

所述运算结果输出模块用于输出经AND操作处理后输出的结果,供后续用户验证判断使用。

本发明的有益效果包括:本发明提出的权限存储及验证优化方法,使系统的存储空间减少了70%以上,单次请求耗时由原来的17毫秒减少到1毫秒以内,尤其在拥有大量用户及需要大量权限认证的软件系统中可以取得显著的改善效果,可以在云计算、分布式应用、物联网、游戏等需要高并发、消耗大量算力及存储资源的场景中广泛应用。

附图说明

图1是本发明用户进行权限验证操作的流程图。

图2是本发明实施例中后台管理系统的模块示例图。

图3是本发明实施例中的权限示例图。

图4是本发明实施例中的FTP管理页面权限验证示例图。

图5是本发明实施例中的日历管理页面权限验证示例图。

图6是本发明实施例中的业务线管理页面权限验证示例图。

具体实施方式

结合以下具体实施例和附图,对本发明作进一步的详细说明。实施本发明的过程、条件、实验方法等,除以下专门提及的内容之外,均为本领域的普遍知识和公知常识,本发明没有特别限制内容。

具体应用是需要和应用系统的权限认证系统相结合,首先需要将系统中所有的模块和权限按照权限存储的方法以二进制BIT位方式进行编号,其次再设置用户权限时也要按照同样的权限存储编号方式进行存储,权限验证按照本发明中的权限验证方法进行验证,需要注意的是存储时和验证时的模块编号必须保持一致。

本发明中使用的权限存储和权限验证方法,可在任何应用系统中使用。

实施例

本示例是将本发明的权限存储和权限验证方法应用于一个后台管理系统中,系统包含:FTP管理、全局配置管理、日历管理、校验规则管理、字典资源管理、业务线管理、用户管理这7个模块,各个模块包含的权限如下:

FTP管理:列表、编辑、删除、浏览、导出数据、导入数据、添加;

全局配置管理:列表、编辑、导出数据、导入数据;

日历管理:列表、添加、编辑、删除、导入Excel;

校验规则管理:列表、编辑、删除、导出数据、导入数据、添加;

字典资源管理:列表、编辑、删除、导出Excel、导入Excel、添加;

业务线管理:列表、编辑、删除、分配用户、添加;

用户管理:列表、编辑、删除、添加。

第一步:需要事先将系统中需要权限控制的模块整理后编号,如图2所示:本系统模块及权限较少,因此使用2个Byte来存储模块权限,其中高8位存储模块,低8位存储权限,具体描述如下:

使用高8位表示模块编号,如下:

FTP管理:00000001

全局配置管理:00000010

日历管理:00000100

校验规则管理:00001000

字典资源管理:00010000

业务线管理:00100000

用户管理:01000000

使用低8位表示权限编号,表示如下:

FTP管理(00000001):列表(00000001)、编辑(00000010)、删除(00000100)、浏览(00001000)、导出数据(00010000)、导入数据(00100000)、添加(01000000);

全局配置管理(00000010):列表(00000001)、编辑(00000010)、导出数据(00000100)、导入数据(00001000);

日历管理(00000100):列表(00000001)、添加(00000010)、编辑(00000100)、删除(00001000)、导入Excel(00010000);

校验规则管理(00001000):列表(00000001)、编辑(00000010)、删除(00000100)、导出数据(00001000)、导入数据(00010000)、添加(00100000);

字典资源管理(00010000):列表(00000001)、编辑(00000010)、删除(00000100)、导出Excel(00001000)、导入Excel(00010000)、添加(00100000)

业务线管理(00100000):列表(00000001)、编辑(00000010)、删除(00000100)、分配用户(00001000)、添加(00010000)

用户管理(01000000):列表(00000001)、编辑(00000010)、删除(00000100)、添加(00001000)

第二步:按照第一步用户权限设置,且根据本发明中的权限存储计算出用户权限数值后保存至数据库中,具体描述如下:

为用户分配FTP管理模块下的列表、编辑权限,按照本发明中权限存储方法获得的对应数值分别为:0000000100000001、0000000100000010,将这些模块权限合并之后的数值为:0000000100000011;

为用户分配日历管理模块下的列表、添加、编辑权限,按照本发明中权限存储方法获得的数值为:0000010000000001、0000010000000010、0000010000000100,将这些模块权限合并之后的数值为:0000010000000111;

为用户分配业务线管理下的列表、编辑权限,按照本发明中权限存储方法获得的数值为:0010000000000001、0010000000000010,将这些模块权限合并之后的数值为:0010000000000011;

因此在用户权限表中只需要保存0000000100000011、0000010000000111、0010000000000011这三个值即可。

第三步:当需要验证用户权限时,根据第二步计算出的权限数值和待验证权限值进行AND计算,并根据结果判断用户是否拥有相应资源的权限。

如图3所示,该用户拥有:FTP管理-列表、FTP管理-编辑、日历管理-列表、日历管理-添加、日历管理-编辑、业务线管理-列表、业务线管理-编辑7个权限,当页面加载时,将这些按钮的权限二进制数值分别和第二步的用户权限数值做AND操作后根据结果值可判断出该用户是否拥有对应按钮的操作权限,如果无此权限则按钮置灰,如图4-6所示:

图4表示本发明实施例中FTP管理页面权限示例图,图中该用户仅拥有列表、编辑这2个权限,其他按钮无权限则显示为灰色;说明进行AND运算后,只有列表和编辑这两个权限的计算结果值为1,其余均为0。

图5表示本发明实施例中日历管理页面权限示例图,图中该用户仅拥有列表、添加、编辑这3个权限,其他按钮无权限则显示为灰色;说明进行AND运算后,只有列表、添加和编辑这三个个权限的计算结果值为1,其余均为0。

图6表示本发明实施例中业务线管理页面权限示例图,图中该用户仅拥有列表、编辑这2个权限,其他按钮无权限则显示为灰色;说明进行AND运算后,只有列表和编辑这两个权限的计算结果值为1,其余均为0。

本发明的保护内容不局限于以上实施例。在不背离本发明构思的精神和范围下,本领域技术人员能够想到的变化和优点都被包括在本发明中,并且以所附的权利要求书为保护范围。

技术分类

06120114692478