9e082e6376
admin_user 加 pages_override(可空 JSON)+ Alembic 迁移;role==custom 时可见页由逐页勾选决定,否则跟随角色。 create/update 收 pages_override(切回普通角色自动清空),_validate_role 放行 custom 哨兵角色。 登录/me 下发有效页时优先用 override → 左侧导航按勾选即时生效。补 4 个用例,test_admin_roles 全绿。 配套前端 PR:shaguabijia-admin-web#admin-custom-perms。 --------- Co-authored-by: no_gen_mu <liujianhishen@gmail.com> Reviewed-on: #126 Co-authored-by: liujiahui <liujiahui@wonderable.ai> Co-committed-by: liujiahui <liujiahui@wonderable.ai>
36 lines
1.3 KiB
Python
36 lines
1.3 KiB
Python
"""admin_user 加 pages_override 列(「自定义」权限:按人存专属可见页 key 列表)
|
|
|
|
权限管理页新增「自定义」角色:选它时该成员的可见页不跟随任何共享角色,而由逐页勾选决定,
|
|
存这个人专属的一份页 key 列表。仅 role == "custom" 时有效;普通角色为 None(可见页跟随角色)。
|
|
PG 用 JSONB,SQLite 退化为通用 JSON(同 admin_audit_log.detail / comparison_record.raw_payload)。
|
|
|
|
Revision ID: admin_user_pages_override
|
|
Revises: admin_user_plain_password
|
|
Create Date: 2026-07-08 00:00:00.000000
|
|
"""
|
|
|
|
from collections.abc import Sequence
|
|
|
|
import sqlalchemy as sa
|
|
from sqlalchemy.dialects.postgresql import JSONB
|
|
|
|
from alembic import op
|
|
|
|
revision: str = "admin_user_pages_override"
|
|
down_revision: str | Sequence[str] | None = "admin_user_plain_password"
|
|
branch_labels: str | Sequence[str] | None = None
|
|
depends_on: str | Sequence[str] | None = None
|
|
|
|
# 与 app/models/admin.py 的 _JSON 一致:PG JSONB / 其它 JSON
|
|
_JSON = sa.JSON().with_variant(JSONB(), "postgresql")
|
|
|
|
|
|
def upgrade() -> None:
|
|
with op.batch_alter_table("admin_user", schema=None) as batch_op:
|
|
batch_op.add_column(sa.Column("pages_override", _JSON, nullable=True))
|
|
|
|
|
|
def downgrade() -> None:
|
|
with op.batch_alter_table("admin_user", schema=None) as batch_op:
|
|
batch_op.drop_column("pages_override")
|