0030_role_edit_permission.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. """角色编辑管理位(契约1.25):sys_role 新增 manage_role_edit。
  2. Revision ID: 0030_role_edit_permission
  3. Revises: 0029_system_management
  4. Create Date: 2026-09-10
  5. 变更要点:
  6. 1. sys_role 新增 manage_role_edit 布尔管理位(默认 0,与
  7. manage_category_edit 等同列族;内置 admin 账号恒有,不受开关约束);
  8. 2. 角色为全局对象,本管理位不受管理范围锚点约束(同分类编辑);
  9. 3. 升级幂等:加列先探测,可重复跑;与 Flyway V15 并行执行互不冲突。
  10. """
  11. from __future__ import annotations
  12. from collections.abc import Sequence
  13. import sqlalchemy as sa
  14. from alembic import op
  15. revision: str = "0030_role_edit_permission"
  16. down_revision: str | None = "0029_system_management"
  17. branch_labels: str | Sequence[str] | None = None
  18. depends_on: str | Sequence[str] | None = None
  19. ROLE_MANAGE_COLUMNS = ("manage_role_edit",)
  20. def _existing_role_columns() -> set[str]:
  21. inspector = sa.inspect(op.get_bind())
  22. return {
  23. column["name"].lower()
  24. for column in inspector.get_columns("sys_role")
  25. }
  26. def upgrade() -> None:
  27. existing_columns = _existing_role_columns()
  28. for column in ROLE_MANAGE_COLUMNS:
  29. if column not in existing_columns:
  30. op.add_column(
  31. "sys_role",
  32. sa.Column(
  33. column,
  34. sa.Boolean(),
  35. nullable=False,
  36. server_default=sa.text("0"),
  37. ),
  38. )
  39. def downgrade() -> None:
  40. existing_columns = _existing_role_columns()
  41. for column in ROLE_MANAGE_COLUMNS:
  42. if column in existing_columns:
  43. op.drop_column("sys_role", column)