| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- """菜单 / 权限 CRUD"""
- from typing import List, Set
- from sqlalchemy.orm import Session
- from app.models.system import SysMenu, SysRoleMenu
- def list_menu_codes_for_role(db: Session, role_id: str) -> List[str]:
- rows = (
- db.query(SysMenu.menu_code)
- .join(SysRoleMenu, SysRoleMenu.menu_id == SysMenu.id)
- .filter(
- SysRoleMenu.role_id == role_id,
- SysMenu.del_flag == "0",
- )
- .all()
- )
- return [r[0] for r in rows]
- def list_page_menus_for_role(db: Session, role_id: str) -> List[SysMenu]:
- """角色可见的目录/菜单(M/C),按 sort 升序。"""
- return (
- db.query(SysMenu)
- .join(SysRoleMenu, SysRoleMenu.menu_id == SysMenu.id)
- .filter(
- SysRoleMenu.role_id == role_id,
- SysMenu.del_flag == "0",
- SysMenu.menu_type.in_(("M", "C")),
- SysMenu.visible == "1",
- )
- .order_by(SysMenu.sort.asc())
- .all()
- )
- def list_all_menus(db: Session) -> List[SysMenu]:
- """全量菜单(含按钮),授权页勾选用。"""
- return (
- db.query(SysMenu)
- .filter(SysMenu.del_flag == "0")
- .order_by(SysMenu.sort.asc())
- .all()
- )
- def role_has_any_menu_code(db: Session, role_id: str, codes: Set[str]) -> bool:
- if not codes:
- return False
- owned = set(list_menu_codes_for_role(db, role_id))
- return bool(owned & codes)
|