| | from datetime import datetime |
| | from sqlalchemy import Column, String, ForeignKey, Enum, DateTime |
| | from sqlalchemy.orm import relationship |
| | from .base import Base |
| | import enum |
| |
|
| |
|
| | class AclRole(enum.Enum): |
| | none = "none" |
| | freeBusyReader = "freeBusyReader" |
| | reader = "reader" |
| | writer = "writer" |
| | owner = "owner" |
| |
|
| |
|
| | class ScopeType(enum.Enum): |
| | default = "default" |
| | user = "user" |
| | group = "group" |
| | domain = "domain" |
| |
|
| |
|
| | class Scope(Base): |
| | __tablename__ = "scopes" |
| |
|
| | id = Column(String, primary_key=True, index=True) |
| | type = Column(Enum(ScopeType), nullable=False) |
| | value = Column(String, nullable=True) |
| |
|
| | |
| | acls = relationship("ACLs", back_populates="scope", cascade="all, delete-orphan") |
| |
|
| | def as_dict(self): |
| | return {"type": self.type.value, "value": self.value} |
| |
|
| |
|
| | class ACLs(Base): |
| | __tablename__ = "acls" |
| |
|
| | id = Column(String, primary_key=True, index=True) |
| |
|
| | calendar_id = Column(String, ForeignKey("calendars.calendar_id"), nullable=False, index=True) |
| | user_id = Column(String, ForeignKey("users.user_id"), nullable=False, index=True) |
| | scope_id = Column(String, ForeignKey("scopes.id"), nullable=False) |
| |
|
| | role = Column(Enum(AclRole), nullable=False) |
| |
|
| | etag = Column(String) |
| | created_at = Column(DateTime, default=datetime.utcnow) |
| | updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) |
| |
|
| | |
| | calendar = relationship("Calendar", back_populates="acls") |
| | user = relationship("User", back_populates="acls") |
| | scope = relationship("Scope", back_populates="acls") |
| |
|