SQLAlchemy/SQL帮助进行分层ACL的金字塔式权限过滤

Pau*_*itt 5 postgresql sqlalchemy pyramid

我正在为SQL中的遍历工作.我希望文档,教程风格,最好的方法来做到这一点.并希望提供一个Pyramid附加库,为人们提供一个起点.因此 https://github.com/pauleveritt/pyramid_sqltraversal - 它有6个Sphinx-docs部分.

但是我会遇到一些棘手的SQLAlchemy问题.现在我正在使用标准SQLAlchemy查询中的权限过滤.我已经承诺这只适用于PostgreSQL 9.4+,因此我将使用JSONB来存储ACL.我不希望在Python中评估每一行的ACL,因为它可能意味着请求中有成千上万的查询.所以我需要一些SQL来分离ACL中的ACE.

这是我对策略的写作:https://github.com/pauleveritt/pyramid_sqltraversal/blob/master/docs/filtered_queries/index.rst

这是混合方法中表达式的占位符代码:

https://github.com/pauleveritt/pyramid_sqltraversal/blob/master/docs/filtered_queries/mysite/models/node.py#L115

就在下面就是使用它的一个例子.我的第一个问题:

  • 混合方法表达是一种合适的方法吗?

  • sqlalchemy.sql是否有任何用于分离序列的构造,如果是,它会是什么样子?

如果传入的主体中的任何项目在ACL主体中,并且传入的权限与ACL权限匹配,则需要在ACL中匹配ACE.当第一个ACE匹配时立即纾困的奖金.

稍后我会问一些关于将它与层次结构的递归CTE相结合,将基于模型/类的ACL传递到生成的SQL等的问题.