Timeline Permissions

This commit is contained in:
John Groszko 2026-04-23 15:55:52 -05:00
parent 34e8d0eae3
commit cfccd424cb
4 changed files with 45 additions and 21 deletions

View file

@ -6,3 +6,9 @@ TIMELINE_ORDER_PUNISHED = "ORDER_PUNISHED"
TIMELINE_ORDERS_POOL_CREATED = "ORDERS_POOL_CREATED"
TIMELINE_ORDERS_POOL_UPDATED = "ORDERS_POOL_UPDATED"
TIMELINE_ORDERS_POOL_DELETED = "ORDERS_POOL_DELETED"
TIMELINE_ORDERS_POOL_EVENTS = [
TIMELINE_ORDERS_POOL_CREATED,
TIMELINE_ORDERS_POOL_UPDATED,
TIMELINE_ORDERS_POOL_DELETED
]

View file

@ -2,6 +2,7 @@ import datetime
import json
from peewee import JOIN, fn
from db.constants import TIMELINE_ORDERS_POOL_EVENTS
from util import sqlite_time
from .models import database, User, OrdersPool, DomSubUsers, Repeat, SkipDay, OrderStatus, MastodonServer, TimelineEvent
@ -57,6 +58,9 @@ def user_has_doms(id):
def user_doms(id):
return [d.dom for d in DomSubUsers.select(DomSubUsers.dom).where(DomSubUsers.sub_id == id)]
def user_subs(id):
return [d.sub for d in DomSubUsers.select(DomSubUsers.sub).where(DomSubUsers.dom_id == id)]
def user_can_orders_pools_view(user, sub):
doms = user_doms(sub.id)
@ -222,13 +226,22 @@ def timeline_event_put(type, text, user, orders_pool=None, order_status=None, ac
extra=json.dumps(extra) if extra is not None else None
)
def timeline_event_recent(user_ids, actor_ids=None, limit=5):
return (TimelineEvent
.select()
.where((
TimelineEvent.user_id.in_(user_ids) |
(TimelineEvent.actor_user_id.in_(actor_ids) if actor_ids is not None else True)
))
.order_by(TimelineEvent.updated_at.desc())
.limit(limit)
)
def timeline_event_recent(user_id, limit=5):
user = User.get_by_id(user_id)
can_view_orders_pools = user_can_orders_pools_view(user, user)
result = TimelineEvent.select()
if(can_view_orders_pools):
result = result.where(
(TimelineEvent.user_id == user_id) |
(TimelineEvent.actor_user_id == user_id)
)
else:
result = result.where(
((TimelineEvent.user_id == user_id) & TimelineEvent.type.not_in(TIMELINE_ORDERS_POOL_EVENTS)) |
(TimelineEvent.actor_user_id == user_id)
)
return result.order_by(TimelineEvent.updated_at.desc()).limit(limit)

View file

@ -79,13 +79,14 @@ def timeline():
"username": t.user.telegram_username,
"actor_username": t.actor.telegram_username if t.actor is not None else None,
"orders_pool": {
"id": t.orders_pool.id,
"id": t.orders_pool.id if user_can_orders_pools_edit(current_user.db_user, t.user) else None,
"name": t.orders_pool.name,
} if t.orders_pool is not None else None,
} if (
t.orders_pool is not None and
user_can_orders_pools_view(current_user.db_user, t.user)
) else None,
"order_status": t.order_status.text if t.order_status is not None else None,
} for t in timeline_event_recent(
subs,
[current_user.db_user.id,])
} for t in timeline_event_recent(current_user.db_user.id)
])
@api.route('/mastodon_oauth')

View file

@ -97,12 +97,16 @@ export const TimelineList: React.FC<{
) : null}
{orders_pool ? (
<Text size="xs">
<Anchor
component={Link}
to={`/orders/${username}/${orders_pool.id}`}
>
{orders_pool.name}
</Anchor>
{orders_pool.id ? (
<Anchor
component={Link}
to={`/orders/${username}/${orders_pool.id}`}
>
{orders_pool.name}
</Anchor>
) : (
orders_pool.name
)}
</Text>
) : null}
{actor_username ? (