Merge "Clean up private story filtering code"
This commit is contained in:
commit
46beecb00a
@ -23,9 +23,8 @@ from oslo_db.sqlalchemy.utils import paginate_query as utils_paginate_query
|
||||
from oslo_log import log
|
||||
from pecan import request
|
||||
import six
|
||||
from sqlalchemy import and_, or_
|
||||
from sqlalchemy.orm import aliased
|
||||
from sqlalchemy.sql.expression import false, true
|
||||
from sqlalchemy import or_
|
||||
from sqlalchemy.sql.expression import false
|
||||
import sqlalchemy.types as sqltypes
|
||||
|
||||
from storyboard._i18n import _
|
||||
@ -384,57 +383,34 @@ def filter_private_stories(query, current_user, story_model=models.Story):
|
||||
:param story_model: The database model used for stories in the query.
|
||||
|
||||
"""
|
||||
# First filter based on users with permissions set directly
|
||||
query = query.outerjoin(models.story_permissions,
|
||||
models.Permission,
|
||||
models.user_permissions,
|
||||
models.User)
|
||||
if current_user:
|
||||
visible_to_users = query.filter(
|
||||
query = query.filter(
|
||||
or_(
|
||||
and_(
|
||||
models.User.id == current_user,
|
||||
story_model.private == true()
|
||||
story_model.permissions.any(
|
||||
models.Permission.users.any(
|
||||
models.User.id == current_user
|
||||
)
|
||||
),
|
||||
story_model.permissions.any(
|
||||
models.Permission.teams.any(
|
||||
models.Team.users.any(
|
||||
models.User.id == current_user
|
||||
)
|
||||
)
|
||||
),
|
||||
story_model.private == false(),
|
||||
story_model.id.is_(None)
|
||||
)
|
||||
)
|
||||
else:
|
||||
visible_to_users = query.filter(
|
||||
query = query.filter(
|
||||
or_(
|
||||
story_model.private == false(),
|
||||
story_model.id.is_(None)
|
||||
)
|
||||
)
|
||||
|
||||
# Now filter based on membership of teams with permissions
|
||||
users = aliased(models.User, name="story_users")
|
||||
query = query.outerjoin(models.team_permissions,
|
||||
models.Team,
|
||||
models.team_membership,
|
||||
(users,
|
||||
users.id == models.team_membership.c.user_id))
|
||||
if current_user:
|
||||
visible_to_teams = query.filter(
|
||||
or_(
|
||||
and_(
|
||||
users.id == current_user,
|
||||
story_model.private == true()
|
||||
),
|
||||
story_model.private == false(),
|
||||
story_model.id.is_(None)
|
||||
)
|
||||
)
|
||||
else:
|
||||
visible_to_teams = query.filter(
|
||||
or_(
|
||||
story_model.private == false(),
|
||||
story_model.id.is_(None)
|
||||
)
|
||||
)
|
||||
|
||||
return visible_to_users.union(visible_to_teams)
|
||||
return query
|
||||
|
||||
|
||||
def filter_private_worklists(query, current_user, hide_lanes=True):
|
||||
|
Loading…
x
Reference in New Issue
Block a user