我有一个带有“BaseVisibilizer”类的应用程序 其他两个班的班级:
class BaseVisibilizer(declarativeBase):
__tablename__ = "base_visibilizers"
_polymorphicIdentity = Column("polymorphic_identity", String(20), key="polymorphicIdentity")
__mapper_args__ = {
'polymorphic_on': _polymorphicIdentity,
'polymorphic_identity': None
}
def __init__(self):
super(BaseVisibilizer, self).__init__()
这是我的User和UserGroup类的基类:两个类 可用于控制某些项目的可见性。
^{pr2}$class User(BaseVisibilizer.BaseVisibilizer):
__tablename__ = "users"
_id = Column("id", Integer, ForeignKey(BaseVisibilizer.BaseVisibilizer.id), primary_key=True)
__mapper_args__ = {
'polymorphic_identity': 'User',
'inherit_condition': _id == BaseVisibilizer.BaseVisibilizer._id,
}
_firstName = Column("first_name", String(50), key="fistName")
_lastName = Column("last_name", String(50), key="lastName")
_userName = Column("user_name", String(50), unique=True, nullable=False)
在我的系统的许多其他类中,我有一种关系 可以包含“BaseVisibilizers”(用户或用户组)。
class Whatever(declarativeBase):
allowedVisibilizers = relationship("BaseVisibilizer",
secondary="intermediate_whatevers_to_base_visibilizers",
collection_class=set)
所以在任何情况下,allowedVisibilizers集合可以 包含UserGroup的User实例(因为两者都是 基地探视器)。如果登录用户或用户组 属于是“允许的访问者”之一,该用户将能够 访问(或“看到”)任何事物的实例。
在某一点上,我想在Whatever中创建一个方法 类,它只给我允许的 实际上是一个用户组(丢弃用户),但我无法 去做吧。
我试过好几种方法,但显然不是正确的 “允许访问”的查询“…”:
What I'd like is something like:
class Whatever(declarativeBase):
[ . . . ]
def getAllowedUserGroups(self):
session = Database.Session()
query = session.query(UserGroup.UserGroup).filter(UserGroup.UserGroup.in_(self.allowedVisibilizers))
return query.all()
(但很明显,UserGroup是一个类,没有in-uu)
当然,我总是可以让所有的“允许探视者”然后移除 用户返回的值,但我试图使它 一点点优化,避免不必要的调用 数据库。
任何提示都将不胜感激。提前谢谢你!
一种解决方案是在
Whatever
上创建另一个关系,该关系将包含到特定表UserGroup
的筛选器,这应该可以做到这一点。有关详细信息,请参阅Multiple Relationships against the Same Parent/Child文档。在您的例子中,在
UserGroup
表上添加额外的连接条件就可以了。还要考虑使用Building Query-Enabled Properties来指定
readonly
。在相关问题 更多 >
编程相关推荐