嗨,我试图在我的NodeJS ExpressJS支持的API服务器上创建一个基于角色的动态路由授权系统。
设想情况:
现在,我的场景显示,由于我的动态角色,我需要一个角色表,需要一个RoutePermissions表来动态地为我的角色分配路由访问权限。然而,我无法找到一种方法来存储我的“不变”数据。
发布于 2020-03-23 12:27:43
数据是“不变的”并不一定意味着它不能改变。它只是不能通过应用程序进行更改。在每一行上设置“不可更改”标志。当true拒绝更改数据时。当false可以改变它。你如何实施这一点取决于你有多偏执。
如果将其限制在应用程序层,那么对数据的所有修改都必须经过应用程序层,否则即使数据库表中有“不可更改”的标志根据您的需要,这可能是可取的。
您可以编写存储过程以强制执行此行为。撤消所有用户的所有插入、更新和删除权限,但拥有存储过程的用户除外。这迫使所有数据修改都要经过存储过程。
将代码中的数据和数据库中的数据混合起来,虽然并非不可能,但确实增加了测试的工作量。“代码中的数据”在逻辑中显示了一个分叉,必须在任何地方进行测试。虽然这一开始并不是一个负担,但这将开始拖到您的进程后面。
保持简单。把它当作数据保存。决定您的基础设施的哪一层应该强制数据的不可变性( NodeJS中的app层或数据库中的存储过程)。
发布于 2020-03-23 12:28:18
将一些数据存储在您的DB中并没有本质上的错误,这些数据以后永远不会更改。只需确保没有简单的方法来处理这些数据。
只需将它们放在您的角色表中,但是在该表中引入一个布尔型“只读”列。因此,您可以标记不应被应用程序更改的记录,并且应用程序可以相应地进行操作。
如果您希望确保没有人以不一致的方式更改该数据,请实现一个正确的检查,该检查将验证是否所有预期记录都在角色表中,以及它们的预期内容。找到一个可以执行此检查的位置或进程(例如,在服务器启动时,或者在某些编辑角色表的过程中,这种检查不够频繁)。
我不清楚您是否需要DB中的路由数据,但如果您需要它,因为您也有“可变”的路由数据,并且希望用“不可更改”的数据来管理这些数据,那么可以应用与#1相同的策略:
忘了这个吧。只需将数据存储在DB中即可。
https://softwareengineering.stackexchange.com/questions/406877
复制相似问题