```
feat(auth): 添加用户权限获取接口并完善JWT令牌角色信息 - 在JWT令牌中添加用户角色信息 - 新增get_my_permissions接口用于获取当前用户权限码列表 - 重构认证回调逻辑,增加错误日志记录 - 更新用户信息获取接口使用Authorization头验证 ```
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
"""rebuild users, permissions, role_permissions tables
|
||||
|
||||
Revision ID: a1b2c3d4e5f6
|
||||
Revises: 3e108afa9bba
|
||||
Create Date: 2026-04-05
|
||||
|
||||
"""
|
||||
from typing import Sequence, Union
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy.dialects import postgresql
|
||||
|
||||
revision: str = 'a1b2c3d4e5f6'
|
||||
down_revision: Union[str, None] = '3e108afa9bba'
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
conn = op.get_bind()
|
||||
insp = sa.inspect(conn)
|
||||
existing = insp.get_table_names()
|
||||
|
||||
# 创建 permissions 表(如不存在)
|
||||
if 'permissions' not in existing:
|
||||
op.create_table(
|
||||
'permissions',
|
||||
sa.Column('id', sa.BigInteger(), autoincrement=True, nullable=False),
|
||||
sa.Column('name', sa.String(length=100), nullable=False),
|
||||
sa.Column('code', sa.String(length=50), nullable=False),
|
||||
sa.Column('module', sa.String(length=50), nullable=True),
|
||||
sa.Column('description', sa.Text(), nullable=True),
|
||||
sa.PrimaryKeyConstraint('id'),
|
||||
sa.UniqueConstraint('code'),
|
||||
)
|
||||
|
||||
# 创建 users 表(如不存在)
|
||||
if 'users' not in existing:
|
||||
op.create_table(
|
||||
'users',
|
||||
sa.Column('id', sa.BigInteger(), autoincrement=True, nullable=False),
|
||||
sa.Column('casdoor_id', sa.String(length=100), nullable=False),
|
||||
sa.Column('username', sa.String(length=100), nullable=False),
|
||||
sa.Column('email', sa.String(length=255), nullable=True),
|
||||
sa.Column('role', sa.String(length=50), nullable=True, server_default='user'),
|
||||
sa.Column('assigned_area', sa.String(length=100), nullable=True),
|
||||
sa.Column('assigned_school', sa.String(length=200), nullable=True),
|
||||
sa.Column('is_active', sa.Boolean(), nullable=True, server_default='true'),
|
||||
sa.Column('last_login', postgresql.TIMESTAMP(), nullable=True),
|
||||
sa.Column('created_at', postgresql.TIMESTAMP(), server_default=sa.text('now()'), nullable=True),
|
||||
sa.PrimaryKeyConstraint('id'),
|
||||
sa.UniqueConstraint('casdoor_id'),
|
||||
)
|
||||
op.create_index('ix_users_id', 'users', ['id'], unique=False)
|
||||
|
||||
# 创建 role_permissions 关联表(如不存在)
|
||||
if 'role_permissions' not in existing:
|
||||
op.create_table(
|
||||
'role_permissions',
|
||||
sa.Column('role', sa.String(length=50), nullable=False),
|
||||
sa.Column('permission_id', sa.BigInteger(), nullable=False),
|
||||
sa.ForeignKeyConstraint(['permission_id'], ['permissions.id']),
|
||||
sa.PrimaryKeyConstraint('role', 'permission_id'),
|
||||
)
|
||||
|
||||
# 插入默认权限数据(跳过已存在的)
|
||||
permissions_table = sa.table(
|
||||
'permissions',
|
||||
sa.column('name', sa.String),
|
||||
sa.column('code', sa.String),
|
||||
sa.column('module', sa.String),
|
||||
sa.column('description', sa.Text),
|
||||
)
|
||||
op.bulk_insert(permissions_table, [
|
||||
{'name': '查看设备', 'code': 'device.view', 'module': 'device', 'description': '查看设备列表和详情'},
|
||||
{'name': '触发检查', 'code': 'device.check', 'module': 'device', 'description': '手动触发设备状态检查'},
|
||||
{'name': '导入设备', 'code': 'device.import', 'module': 'device', 'description': '通过Excel导入设备数据'},
|
||||
{'name': '编辑设备', 'code': 'device.edit', 'module': 'device', 'description': '编辑设备信息'},
|
||||
{'name': '删除设备', 'code': 'device.delete', 'module': 'device', 'description': '删除设备记录'},
|
||||
{'name': '查看OLT', 'code': 'olt.view', 'module': 'olt', 'description': '查看OLT设备列表'},
|
||||
{'name': '管理OLT', 'code': 'olt.manage', 'module': 'olt', 'description': '添加、编辑、删除OLT设备'},
|
||||
{'name': '查看用户', 'code': 'user.view', 'module': 'user', 'description': '查看用户列表'},
|
||||
{'name': '管理用户', 'code': 'user.manage', 'module': 'user', 'description': '修改用户角色和权限'},
|
||||
{'name': '系统管理', 'code': 'system.admin', 'module': 'system', 'description': '系统级管理操作'},
|
||||
])
|
||||
|
||||
# 插入默认角色权限
|
||||
op.execute("""
|
||||
INSERT INTO role_permissions (role, permission_id)
|
||||
SELECT 'area_admin', id FROM permissions WHERE code IN ('device.view', 'device.check', 'olt.view')
|
||||
""")
|
||||
op.execute("""
|
||||
INSERT INTO role_permissions (role, permission_id)
|
||||
SELECT 'school_admin', id FROM permissions WHERE code IN ('device.view')
|
||||
""")
|
||||
op.execute("""
|
||||
INSERT INTO role_permissions (role, permission_id)
|
||||
SELECT 'user', id FROM permissions WHERE code IN ('device.view')
|
||||
""")
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
op.drop_table('role_permissions')
|
||||
op.drop_index('ix_users_id', table_name='users')
|
||||
op.drop_table('users')
|
||||
op.drop_table('permissions')
|
||||
Reference in New Issue
Block a user