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