diff options
Diffstat (limited to 'server/szurubooru/search/configs/post_search_config.py')
| -rw-r--r-- | server/szurubooru/search/configs/post_search_config.py | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/server/szurubooru/search/configs/post_search_config.py b/server/szurubooru/search/configs/post_search_config.py index 8d4672d..8c2b5b9 100644 --- a/server/szurubooru/search/configs/post_search_config.py +++ b/server/szurubooru/search/configs/post_search_config.py @@ -3,7 +3,7 @@ from typing import Any, Dict, Optional, Tuple import sqlalchemy as sa from szurubooru import db, errors, model -from szurubooru.func import util +from szurubooru.func import auth, util from szurubooru.search import criteria, tokens from szurubooru.search.configs import util as search_util from szurubooru.search.configs.base_search_config import ( @@ -150,6 +150,15 @@ def _category_filter( return query.filter(expr) +def _safety_filter( + query: SaQuery, criterion: Optional[criteria.BaseCriterion], negated: bool +) -> SaQuery: + assert criterion + return search_util.create_str_filter( + model.Post.safety, _safety_transformer + )(query, criterion, negated) + + class PostSearchConfig(BaseSearchConfig): def __init__(self) -> None: self.user = None # type: Optional[model.User] @@ -208,6 +217,15 @@ class PostSearchConfig(BaseSearchConfig): return db.session.query(model.Post) def finalize_query(self, query: SaQuery) -> SaQuery: + if self.user and not auth.has_privilege(self.user, "posts:list:unsafe"): + # exclude unsafe posts: + query = _safety_filter( + query, + criteria.PlainCriterion( + model.Post.SAFETY_UNSAFE, model.Post.SAFETY_UNSAFE + ), + negated=True, + ) return query.order_by(model.Post.post_id.desc()) @property @@ -363,12 +381,7 @@ class PostSearchConfig(BaseSearchConfig): model.Post.last_feature_time ), ), - ( - ["safety", "rating"], - search_util.create_str_filter( - model.Post.safety, _safety_transformer - ), - ), + (["safety", "rating"], _safety_filter), (["note-text"], _note_filter), ( ["flag"], |