Start User management
This commit is contained in:
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user