SQLAlchemy&;复杂查询
我必须为现有应用程序实现ACLSQLAlchemy&;复杂查询,sql,join,sqlalchemy,python-elixir,Sql,Join,Sqlalchemy,Python Elixir,我必须为现有应用程序实现ACL 因此,我将auser、group和groupmembers表添加到数据库中。 我通过关联表groupmembers定义了用户和组之间的多种关系 为了保护应用程序的某些资源(即,项目),我添加了一个额外的关联表auth_items,该关联表应用作组/用户与特定项目之间的多个关系的关联表 项目包含以下列: 用户id-->用户表 组id-->组表 项目id-->项目表 至少设置了用户id和组id列的on。因此,可以为组或用户定义对特定项目的访问权限 我使用Assoc
因此,我将auser、group和groupmembers表添加到数据库中。
我通过关联表groupmembers定义了用户和组之间的多种关系
为了保护应用程序的某些资源(即,项目),我添加了一个额外的关联表auth_items,该关联表应用作组/用户与特定项目之间的多个关系的关联表 项目包含以下列:
- 用户id-->用户表
- 组id-->组表
- 项目id-->项目表
我现在想显示用户有权访问的所有项目,我很难做到这一点。使用以下标准:
- 应显示用户拥有的所有项目(item.owner\u id=user.id)
- 应显示所有公共项(item.access=public)
- 应显示用户有权访问的所有项目(auth_item.user_id=user.id)
- 应显示用户组有权访问的所有项目
clause = and_(item.access == 'public')
if user is not None:
clause = or_(clause,item.owner == user,item.users.contains(user),item.groups.contains(group for group in user.groups))
第三个标准产生一个错误
item.groups.contains(group for group in user.groups)
实际上,我不确定这是否是一个好方法。过滤众多关系的最佳方法是什么?
如何根据其他列表/关系筛选多个关系?
顺便说一句,我正在使用最新的sqlalchemy(6.0)和elixir版本 谢谢你的见解
contains()
方法用于单项检查。假设您的组表映射到组
类,请尝试以下操作:
item.groups.any(Group.id.in_([group.id for group in user.groups])
contains()
方法用于单项检查。假设您的组表映射到组
类,请尝试以下操作:
item.groups.any(Group.id.in_([group.id for group in user.groups])
谢谢你的建议。我明天会试试,并报告我的发现。谢谢你的建议。我明天会尝试一下,并报告我的发现。