Merge branch 'main' into security
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
36
models.py
36
models.py
@@ -1,10 +1,16 @@
|
||||
<<<<<<< HEAD
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
from sqlalchemy import Column, Integer, String, ForeignKey, Text
|
||||
=======
|
||||
from sqlalchemy import Column, Integer, String, ForeignKey, Text, DateTime, Boolean
|
||||
>>>>>>> main
|
||||
from sqlalchemy.orm import relationship
|
||||
from db import Base
|
||||
from datetime import datetime
|
||||
|
||||
<<<<<<< HEAD
|
||||
class ActionLog(Base):
|
||||
__tablename__ = 'action_logs'
|
||||
id = Column(Integer, primary_key=True)
|
||||
@@ -13,6 +19,36 @@ class ActionLog(Base):
|
||||
details = Column(String)
|
||||
timestamp = Column(String, default=lambda: datetime.utcnow().isoformat())
|
||||
|
||||
=======
|
||||
# Битовые флаги прав
|
||||
SCOPE_POST = 1 # право постить
|
||||
SCOPE_MANAGE_BTNS = 2 # право управлять кнопками (опционально)
|
||||
SCOPE_SHARE = 4 # право делиться дальше (опционально)
|
||||
|
||||
class ChannelAccess(Base):
|
||||
__tablename__ = "channel_accesses"
|
||||
id = Column(Integer, primary_key=True)
|
||||
channel_id = Column(Integer, ForeignKey("channels.id"), nullable=False)
|
||||
|
||||
# Кто выдал доступ (владелец/менеджер с SCOPE_SHARE)
|
||||
invited_by_admin_id = Column(Integer, ForeignKey("admins.id"), nullable=False)
|
||||
|
||||
# Кому выдан доступ (заполняется при активации, до активации = NULL)
|
||||
invited_admin_id = Column(Integer, ForeignKey("admins.id"), nullable=True)
|
||||
|
||||
# Безопасно: храним ХЭШ токена приглашения (сам токен не храним)
|
||||
token_hash = Column(String, nullable=False)
|
||||
|
||||
scopes = Column(Integer, default=SCOPE_POST, nullable=False) # битовая маска
|
||||
status = Column(String, default="pending", nullable=False) # pending|active|revoked|expired
|
||||
|
||||
created_at = Column(DateTime, default=datetime.utcnow, nullable=False)
|
||||
accepted_at = Column(DateTime, nullable=True)
|
||||
revoked_at = Column(DateTime, nullable=True)
|
||||
expires_at = Column(DateTime, nullable=True)
|
||||
|
||||
channel = relationship("Channel", foreign_keys=[channel_id])
|
||||
>>>>>>> main
|
||||
class Admin(Base):
|
||||
__tablename__ = 'admins'
|
||||
id = Column(Integer, primary_key=True)
|
||||
|
||||
Reference in New Issue
Block a user