springcloud 权限管理方案,spring cloud微服务架构进阶
chanong
|Spring Cloud 微服务架构中的数据权限DataPermision 实施方案1. 为什么会出现在Spring Cloud 的微服务架构中,常见的权限控制除了菜单权限之外,还包括数据权限DataPermision。菜单权限主要用于控制用户角色有权访问的菜单和页面按钮的显示。另一方面,数据权限控制业务数据是显示当前公司、所有公司还是当前公司及其子公司。
近年来,数据中心也解决了Java项目中的数据权限问题。本文介绍了几种DataPermission数据权限实现方案。
2. 关键问题DataPermision 的关键问题是查询性能、授权、身份验证和字段级控制。
比如百万级微服务Spring Cloud架构数据规模,mysql如何实现秒级查询?
如何为用户授予百万级权限DataPermission?
如何快速高效地进行数据认证?
如何实现字段级权限控制?
3. 权限模型的核心抽象首先我们列出一个图来介绍权限模型的核心概念:
根据上图的权限分析,就权限实体、部门、角色、菜单权限而言,我们可以看到以下要素。
菜单权限:用于控制可以查看哪些菜单和页面按钮。
Permission Entity : 这部分是DataPermission模型的核心元素,是系统需要控制的数据。例如:客户、订单、渠道、区域等。
部门:一般意义上的部门组织结构。
角色:一个抽象实体,用于快速为用户组分配相同的权限,与菜单权限的角色概念一致。
4.根据上面的权限模型图查询权限DataPermission List sql:的模型。
从xx_table 中选择xxx (xxx) 至帐户,(xxx) 至产品组,(xxx) 至国家/地区
这是该模型的查询模型。其中account、product_group、country代表您需要控制的权限实体。
这只是一个简单的模型,但是可以看到,如果账户、国家等数据量足够大,mysql在查询中的查询性能是非常严重的。例如,如果账户数据大小为100万级别。
4.1 引入部门组织结构,克服数据量限制在依托Spring Cloud DataPermision模型图的同时,我们引入了部门组织结构。例如,部门A的经理可以查看部门A及其下属部门的数据权限。如果您是正式员工,您只能看到自己账户中的数据。
给出一个部门的微服务组织结构图,用密钥标记每个部分,并创建密钥生成规则:
1.根部门键是数字10
2、根部门直属部门的按键为10 001、10 002、10 003……
3. 其他密钥生成逻辑与步骤2相同。唯一的区别是密钥长度更长(例如,10 001 001、10 001 002)。
将以下key: 附加到部门
该模型结合了mysql正向查询索引(深度如“xxxx%”)的特点。
类似“10%”的东西
像“10001%”这样的部门
像“10002%”这样的部门
即使数据量达到300万条,上述查询在mysql中也能在1秒内得到答复。
4.2 授权方式查询性能问题解决后,就可以解决授权问题了。
通常根据员工的职位设置权限,例如普通员工或部门经理。
正式员工:无需个人批准。直接绑定员工ID就可以了。
部门经理:设置员工可以看到哪些部门(多种支持)
4.3 认证方法认证和授权通常是相互的过程。
1. 判断该员工是否是所使用部门的经理
2、如果有,取出部门权限密钥
3、添加SQL,使用mysql前缀查询数据
4.4 数据库实施1. 识别权威实体
2. 在授权实体中添加工号和部门字段(:emp_no、dept_no 等)。
3、如果要查询,首先获取该员工的角色权限,如果是部门经理,则获取对应的key列表。
4. 构建SQL 并添加部门编号或员工编号SQL 片段。
dept_no(如“10 001%”)或dept_no(如“10 002%”),这是部门SQL
emp_no='xxx',这是正式员工的SQL
5. 总结Spring Cloud 微服务架构中仍需要识别和控制的数据。您还应该注意数据库索引的组合。易于扩展。
本文提出的方法易于通过微服务架构进行扩展,并且易于控制权限。








