Timeline Permissions
This commit is contained in:
parent
34e8d0eae3
commit
cfccd424cb
4 changed files with 45 additions and 21 deletions
|
|
@ -6,3 +6,9 @@ TIMELINE_ORDER_PUNISHED = "ORDER_PUNISHED"
|
||||||
TIMELINE_ORDERS_POOL_CREATED = "ORDERS_POOL_CREATED"
|
TIMELINE_ORDERS_POOL_CREATED = "ORDERS_POOL_CREATED"
|
||||||
TIMELINE_ORDERS_POOL_UPDATED = "ORDERS_POOL_UPDATED"
|
TIMELINE_ORDERS_POOL_UPDATED = "ORDERS_POOL_UPDATED"
|
||||||
TIMELINE_ORDERS_POOL_DELETED = "ORDERS_POOL_DELETED"
|
TIMELINE_ORDERS_POOL_DELETED = "ORDERS_POOL_DELETED"
|
||||||
|
|
||||||
|
TIMELINE_ORDERS_POOL_EVENTS = [
|
||||||
|
TIMELINE_ORDERS_POOL_CREATED,
|
||||||
|
TIMELINE_ORDERS_POOL_UPDATED,
|
||||||
|
TIMELINE_ORDERS_POOL_DELETED
|
||||||
|
]
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import datetime
|
||||||
import json
|
import json
|
||||||
from peewee import JOIN, fn
|
from peewee import JOIN, fn
|
||||||
|
|
||||||
|
from db.constants import TIMELINE_ORDERS_POOL_EVENTS
|
||||||
from util import sqlite_time
|
from util import sqlite_time
|
||||||
|
|
||||||
from .models import database, User, OrdersPool, DomSubUsers, Repeat, SkipDay, OrderStatus, MastodonServer, TimelineEvent
|
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):
|
def user_doms(id):
|
||||||
return [d.dom for d in DomSubUsers.select(DomSubUsers.dom).where(DomSubUsers.sub_id == 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):
|
def user_can_orders_pools_view(user, sub):
|
||||||
doms = user_doms(sub.id)
|
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
|
extra=json.dumps(extra) if extra is not None else None
|
||||||
)
|
)
|
||||||
|
|
||||||
def timeline_event_recent(user_ids, actor_ids=None, limit=5):
|
def timeline_event_recent(user_id, limit=5):
|
||||||
return (TimelineEvent
|
user = User.get_by_id(user_id)
|
||||||
.select()
|
|
||||||
.where((
|
can_view_orders_pools = user_can_orders_pools_view(user, user)
|
||||||
TimelineEvent.user_id.in_(user_ids) |
|
|
||||||
(TimelineEvent.actor_user_id.in_(actor_ids) if actor_ids is not None else True)
|
result = TimelineEvent.select()
|
||||||
))
|
|
||||||
.order_by(TimelineEvent.updated_at.desc())
|
if(can_view_orders_pools):
|
||||||
.limit(limit)
|
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)
|
||||||
|
|
|
||||||
11
web/api.py
11
web/api.py
|
|
@ -79,13 +79,14 @@ def timeline():
|
||||||
"username": t.user.telegram_username,
|
"username": t.user.telegram_username,
|
||||||
"actor_username": t.actor.telegram_username if t.actor is not None else None,
|
"actor_username": t.actor.telegram_username if t.actor is not None else None,
|
||||||
"orders_pool": {
|
"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,
|
"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,
|
"order_status": t.order_status.text if t.order_status is not None else None,
|
||||||
} for t in timeline_event_recent(
|
} for t in timeline_event_recent(current_user.db_user.id)
|
||||||
subs,
|
|
||||||
[current_user.db_user.id,])
|
|
||||||
])
|
])
|
||||||
|
|
||||||
@api.route('/mastodon_oauth')
|
@api.route('/mastodon_oauth')
|
||||||
|
|
|
||||||
|
|
@ -97,12 +97,16 @@ export const TimelineList: React.FC<{
|
||||||
) : null}
|
) : null}
|
||||||
{orders_pool ? (
|
{orders_pool ? (
|
||||||
<Text size="xs">
|
<Text size="xs">
|
||||||
<Anchor
|
{orders_pool.id ? (
|
||||||
component={Link}
|
<Anchor
|
||||||
to={`/orders/${username}/${orders_pool.id}`}
|
component={Link}
|
||||||
>
|
to={`/orders/${username}/${orders_pool.id}`}
|
||||||
{orders_pool.name}
|
>
|
||||||
</Anchor>
|
{orders_pool.name}
|
||||||
|
</Anchor>
|
||||||
|
) : (
|
||||||
|
orders_pool.name
|
||||||
|
)}
|
||||||
</Text>
|
</Text>
|
||||||
) : null}
|
) : null}
|
||||||
{actor_username ? (
|
{actor_username ? (
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue