我需要为我正在研究的系统编写一个ACL模块。 我以前写了ACL - 但我总觉得它可以更有效率
由于我没有过多地使用NoSQL数据库,并且我认真考虑开始使用它们以达到其优势的目的 - 我想听听您的意见ACL模块是否是一个这种情况的好例子
ACL应包含ARO(访问请求对象 - 例如站点成员),ACO(访问控制对象 - 例如对站点中项目的操作。[例如:查看产品编号2])
两者都应该被分组为树 - 这样我就可以拥有一组成员和一组产品。
我最近的实现使用了一组已定义的权限(每个都有自己的编号),它们通过按位OR操作组合成一个数字来设置ARO的权限级别
例如:如果view = 1, modify = 2, delete = 4
和用户#1可以查看和删除对象#3,我们将在数据库中有这一行(在我的情况下是mysql db):
| user_id | object_id | level |
===========================================
| 1 | 3 | 5 |
为了获得用户的完整权限层次结构,我创建了一个递归连接查询(同时指定了支持的最大深度),然后检查了ARO中所有对象的权限定义&# 39;到树根的路径
我现在看到了一种有趣的方法来消除this article
中联接部分的需要回到我的问题 -
在NoSQL中,数据被保存为对象,这些对象可以是树形数据结构,并且开箱即用#34; - 所以在这样的结构中至少拥有组层次结构似乎更合理
您认为对于最有效和通用的ACL系统来说,更好的解决方案是什么?