Merge pm (panel-based access, supervisor role) onto the restored RBAC base
Reverting 253c922 first made this merge small — only two conflicts:
- MobileTabBar: supervisor null-check combined with v7's /review hiding
- ArrivalsPage: pm's PM+supervisor scoping combined with v8's 3-way fetch
(transfers) and its transfer-receive helpers, plus pm's canAccess gate
This commit is contained in:
@@ -66,6 +66,47 @@ class User(Base):
|
||||
created_at: Mapped[datetime] = _timestamptz()
|
||||
|
||||
|
||||
class UserPanel(Base):
|
||||
"""user_panels — تخصیص پنل + سطح دسترسی به کاربر (جایگزین مدل نقش).
|
||||
|
||||
panel: 'procurement' | 'inventory' | 'pm'
|
||||
level: 'full' — تدارکات: تغییر کامل در کل پنل؛ انبار: همه پروژهها
|
||||
(بهجز تغییر موجودی)
|
||||
'limited' — تدارکات: فقط افزودن استعلام برای پروژههای عضویت؛
|
||||
انبار: فقط پروژههای عضویت + امکان تغییر موجودی
|
||||
"""
|
||||
|
||||
__tablename__ = "user_panels"
|
||||
|
||||
id: Mapped[uuid.UUID] = _uuid_pk()
|
||||
user_id: Mapped[uuid.UUID] = mapped_column(
|
||||
ForeignKey("users.id", ondelete="CASCADE"), nullable=False, index=True
|
||||
)
|
||||
panel: Mapped[str] = mapped_column(Text, nullable=False)
|
||||
level: Mapped[str] = mapped_column(Text, nullable=False)
|
||||
created_at: Mapped[datetime] = _timestamptz()
|
||||
|
||||
__table_args__ = (UniqueConstraint("user_id", "panel", name="uq_user_panel"),)
|
||||
|
||||
|
||||
class UserProjectMembership(Base):
|
||||
"""user_project_members — عضویت M:N کاربر در پروژهها، جدا از مسئولیت
|
||||
پروژه (projects.pm_user_id). محدودهی دادهی سطح limited را تعیین میکند."""
|
||||
|
||||
__tablename__ = "user_project_members"
|
||||
|
||||
id: Mapped[uuid.UUID] = _uuid_pk()
|
||||
user_id: Mapped[uuid.UUID] = mapped_column(
|
||||
ForeignKey("users.id", ondelete="CASCADE"), nullable=False, index=True
|
||||
)
|
||||
project_id: Mapped[uuid.UUID] = mapped_column(
|
||||
ForeignKey("projects.id", ondelete="CASCADE"), nullable=False, index=True
|
||||
)
|
||||
created_at: Mapped[datetime] = _timestamptz()
|
||||
|
||||
__table_args__ = (UniqueConstraint("user_id", "project_id", name="uq_user_project_member"),)
|
||||
|
||||
|
||||
class Supplier(Base):
|
||||
__tablename__ = "suppliers"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user