我使用金字塔框架开发了一个小型 Web 应用程序,并且刚刚实现了集成的安全功能。我创建了一个 ressource 对象,我们称之为Page
,并赋予它一个 ACL 以便每个用户都可以查看和编辑他拥有适当权限的页面。这一切都很好。
我的问题如下:创建当前登录用户允许查看的所有页面列表的金字塔适当方法是什么?
该应用程序使用 URLDispatch 和 SQLAlchemy。
我使用金字塔框架开发了一个小型 Web 应用程序,并且刚刚实现了集成的安全功能。我创建了一个 ressource 对象,我们称之为Page
,并赋予它一个 ACL 以便每个用户都可以查看和编辑他拥有适当权限的页面。这一切都很好。
我的问题如下:创建当前登录用户允许查看的所有页面列表的金字塔适当方法是什么?
该应用程序使用 URLDispatch 和 SQLAlchemy。
没有“适合金字塔的方式”。只需在您的数据库中查询“允许当前登录用户查看的所有页面的列表”。
db.query(Page).filter_by(owner=user_id).
有 Pyramid食谱食谱用于访问用户和数据库会话的惯用方式request.user
,request.db
可能值得一看。
如果数据库不知道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)
当然有缺点,但这是一种方法。