我想就设计基于计数的访问控制获得一些建议。例如,我想根据客户的帐户限制客户可以在我的系统中创建的用户数量。因此,默认情况下,客户可以创建 2 个用户,但如果升级他们的帐户,他们可以创建 5 个用户,依此类推。在类似的基础上,我还需要限制更多功能。
该应用程序遵循通用模型,因此公开的每个功能都有一个后备表,并且我们有一个处理该表上的 CRUD 操作的类。此外,该应用程序在多个节点上运行并具有分布式缓存。
我为实现这一点而采取的方法如下 - 我有一个新表,它捕获要控制的功能和允许的限制(每个客户存储)。- 我截取所有表的创建方法并检查相关表是否需要应用访问控制。如果是这样,我会获取已创建实体的数量并与限制进行比较以决定是否应该允许创建。- 在并发请求的情况下,我正在使用数据库来处理同步。因此,在调用 create 方法后,我使用以下 where 子句更新表
其中 (count_column + 1) = #countInMemory#
. 即仅当存储在 DB 中的值 + 1 = 内存中的值时,更新才会成功。这将确保即使两个线程同时尝试创建,也只有其中一个能够成功更新。成功更新的线程获胜,另一个回滚。这样我就不需要同步应用程序中的任何代码。
我想知道是否有任何其他/更好的方法来做到这一点。我的应用程序在 Oracle 和 MySQL 数据库上运行。
谢谢您的帮助。