Start User management

This commit is contained in:
2025-12-13 15:15:18 +01:00
parent a5ac52a387
commit bafca3c291
6 changed files with 145 additions and 11 deletions

View File

@@ -55,6 +55,12 @@ class User(Base):
)
orders: Mapped[list["Order"]] = relationship("Order", back_populates="user")
user_groups: Mapped[list["UserGroup"]] = relationship(
"UserGroup",
secondary=TABLE_PREFIX + "user_user_group_association",
back_populates="users",
)
@property
def shopping_cart(self):
for order in self.orders:
@@ -68,6 +74,52 @@ class User(Base):
return cart
def has_permission(self, scope: str, action: str) -> bool:
for group in self.user_groups:
for permission in group.permissions:
if permission.scope == scope and permission.action == action:
return True
return False
class UserGroup(Base):
__tablename__ = TABLE_PREFIX + "user_group"
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
name: Mapped[str] = mapped_column(nullable=False, unique=True)
description: Mapped[str] = mapped_column(nullable=True)
permissions = relationship("Permission", back_populates="user_group")
users: Mapped[list["User"]] = relationship(
"User",
secondary=TABLE_PREFIX + "user_user_group_association",
back_populates="user_groups",
)
user_group_association = Table(
TABLE_PREFIX + "user_user_group_association",
Base.metadata,
Column("user_id", ForeignKey(TABLE_PREFIX + "user.id"), primary_key=True),
Column(
"user_group_id", ForeignKey(TABLE_PREFIX + "user_group.id"), primary_key=True
),
)
class Permission(Base):
__tablename__ = TABLE_PREFIX + "permission"
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
scope: Mapped[str] = mapped_column(nullable=False)
action: Mapped[str] = mapped_column(nullable=False)
user_group_id: Mapped[int] = mapped_column(
ForeignKey(TABLE_PREFIX + "user_group.id")
)
user_group: Mapped["UserGroup"] = relationship(
"UserGroup", back_populates="permissions"
)
class Area(Base):
__tablename__ = TABLE_PREFIX + "area"