Web applications 如何在Pyramid/SQLAlchemy中创建所有可访问对象的列表?

Web applications 如何在Pyramid/SQLAlchemy中创建所有可访问对象的列表?,web-applications,sqlalchemy,security,pyramid,Web Applications,Sqlalchemy,Security,Pyramid,我已经使用金字塔框架开发了一个小型web应用程序,并且刚刚实现了集成的安全特性。我已经创建了一个ressource对象,我们称之为页面,并赋予它一个ACL,以便每个用户都可以查看和编辑他拥有相应权限的页面。这一切都很好 我的问题是:创建当前登录用户可以看到的所有页面列表的适当方法是什么 该应用程序使用URLDispatch和SQLAlchemy。没有“适合金字塔的方式”。只需在数据库中查询“当前登录用户允许查看的所有页面列表” 对于通过request.user和request.db访问用户和数据

我已经使用金字塔框架开发了一个小型web应用程序,并且刚刚实现了集成的安全特性。我已经创建了一个ressource对象,我们称之为
页面
,并赋予它一个ACL,以便每个用户都可以查看和编辑他拥有相应权限的页面。这一切都很好

我的问题是:创建当前登录用户可以看到的所有页面列表的适当方法是什么

该应用程序使用URLDispatch和SQLAlchemy。

没有“适合金字塔的方式”。只需在数据库中查询“当前登录用户允许查看的所有页面列表”

对于通过
request.user
request.db
访问用户和数据库会话的惯用方法,有一些金字塔配方值得一看。

没有“适合金字塔的方法”。只需在数据库中查询“当前登录用户允许查看的所有页面列表”


对于通过
request.user
request.db
访问用户和数据库会话的惯用方法,有一些金字塔配方值得一看。

如果数据库不知道ACL,您可以对它们进行后期筛选

from pyramid.security import has_permission

def make_permission_filter(request, permission="view"):
    def f(r):
        if r and has_permission(permission, r, request):
            return r
        else:
            return None

(r for r in make_permission_filter(request, permission="view")(db.query(Page).filter_by(owner=user_id)) if r)

当然也有缺点,但这是一种方法

如果数据库不知道ACL,则可以对其进行后期筛选

from pyramid.security import has_permission

def make_permission_filter(request, permission="view"):
    def f(r):
        if r and has_permission(permission, r, request):
            return r
        else:
            return None

(r for r in make_permission_filter(request, permission="view")(db.query(Page).filter_by(owner=user_id)) if r)
当然也有缺点,但这是一种方法