| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- """主案ACL允许权限模型。"""
- from __future__ import annotations
- from sqlalchemy import (
- BigInteger,
- Boolean,
- CheckConstraint,
- Computed,
- ForeignKey,
- Index,
- Integer,
- String,
- UniqueConstraint,
- text,
- )
- from sqlalchemy.orm import Mapped, mapped_column
- from dms.database.base import BusinessTableMixin
- from dms.extensions import db
- class Permission(BusinessTableMixin, db.Model):
- __tablename__ = "doc_permission"
- __table_args__ = (
- CheckConstraint(
- "subject_type IN ('ORG', 'USER')",
- name="permission_subject_type",
- ),
- UniqueConstraint(
- "document_id",
- "subject_type",
- "subject_id",
- "active_marker",
- name="uq_doc_permission_active",
- ),
- Index(
- "ix_doc_permission_document_active",
- "document_id",
- "is_deleted",
- ),
- Index(
- "ix_doc_permission_subject_active",
- "subject_type",
- "subject_id",
- "is_deleted",
- ),
- )
- document_id: Mapped[int] = mapped_column(
- BigInteger,
- ForeignKey("doc_document.id", ondelete="RESTRICT"),
- nullable=False,
- )
- subject_type: Mapped[str] = mapped_column(String(20), nullable=False)
- subject_id: Mapped[int] = mapped_column(BigInteger, nullable=False)
- subject_name: Mapped[str] = mapped_column(String(255), nullable=False)
- can_view: Mapped[bool] = mapped_column(
- Boolean,
- nullable=False,
- server_default=text("1"),
- )
- can_download: Mapped[bool] = mapped_column(
- Boolean,
- nullable=False,
- server_default=text("0"),
- )
- can_edit: Mapped[bool] = mapped_column(
- Boolean,
- nullable=False,
- server_default=text("0"),
- )
- can_manage_permission: Mapped[bool] = mapped_column(
- Boolean,
- nullable=False,
- server_default=text("0"),
- )
- can_delete: Mapped[bool] = mapped_column(
- Boolean,
- nullable=False,
- server_default=text("0"),
- )
- active_marker: Mapped[int | None] = mapped_column(
- Integer,
- Computed("IF(is_deleted = 0, 1, NULL)", persisted=False),
- nullable=True,
- )
|