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

时间:2013-03-25 21:32:10

标签: web-applications sqlalchemy security pyramid

我使用金字塔框架开发了一个小型Web应用程序,并且刚刚实现了集成的安全功能。我创建了一个ressource对象,让我们称之为Page,然后我赋予它一个ACL,这样每个用户都可以查看和编辑他拥有相应权限的页面。一切正常。

我的问题如下:金字塔是否有适当的方法来创建当前登录用户可以看到的所有页面的列表?

该应用程序使用URLDispatch和SQLAlchemy。

2 个答案:

答案 0 :(得分:1)

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

db.query(Page).filter_by(owner=user_id).

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

答案 1 :(得分:0)

如果数据库不知道acls,你可以过滤它们。

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)

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