role.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. from sqlalchemy.orm import Session
  2. from app.models.menu import Menu
  3. from app.models.role import Role
  4. from app.models.user import User
  5. from app.services.base import CrudService
  6. class RoleService:
  7. @staticmethod
  8. def get_by_id(db: Session, id: int) -> Role | None:
  9. return CrudService.get_by_id(Role, db, id)
  10. @staticmethod
  11. def get_paged(db: Session, page: int, page_size: int, filters: list | None = None):
  12. return CrudService.get_paged(Role, db, page, page_size, filters)
  13. @staticmethod
  14. def create(db: Session, obj_in: dict) -> Role:
  15. return CrudService.create(Role, db, obj_in)
  16. @staticmethod
  17. def update(db: Session, id: int, obj_in: dict) -> Role | None:
  18. return CrudService.update(Role, db, id, obj_in)
  19. @staticmethod
  20. def soft_delete(db: Session, id: int) -> bool:
  21. return CrudService.soft_delete(Role, db, id)
  22. @staticmethod
  23. def get_users_by_role(db: Session, role_id: int) -> list[User]:
  24. role = db.query(Role).filter(Role.id == role_id, Role.del_flag == 0).first()
  25. if not role:
  26. return []
  27. return list(role.users)
  28. @staticmethod
  29. def assign_users(db: Session, role_id: int, user_ids: list[int]) -> Role | None:
  30. role = db.query(Role).filter(Role.id == role_id, Role.del_flag == 0).first()
  31. if not role:
  32. return None
  33. users = db.query(User).filter(User.id.in_(user_ids), User.del_flag == 0).all()
  34. role.users = list(users)
  35. db.flush()
  36. return role
  37. @staticmethod
  38. def assign_menus(db: Session, role_id: int, menu_ids: list[int]) -> Role | None:
  39. """为角色分配菜单权限(全量替换)"""
  40. role = db.query(Role).filter(Role.id == role_id, Role.del_flag == 0).first()
  41. if not role:
  42. return None
  43. menus = db.query(Menu).filter(Menu.id.in_(menu_ids), Menu.del_flag == 0).all()
  44. role.menus = list(menus)
  45. db.flush()
  46. return role