后端: - InstanceGroup 新增 access_type (readonly/datachange/ddl) 和 allowed_databases 字段 - 创建 role_permissions.py 角色权限服务 (admin/dba/auditor/developer) - SQLite ALTER TABLE 迁移脚本 前端: - InstanceGroupPage 全面重写: 3种权限类型卡片(只读/数据变更/DDL)替代20+开关 - 新增/编辑弹窗: 权限类型选择 + 限定数据库输入 - 左侧列表显示权限类型标签 - 菜单标签: '权限管理' → '权限组' - 工单列表 + 工单详情: 新增撤销按钮 (pending/reviewing 状态可撤销) - API 类型定义: 新增 access_type/allowed_databases
36 lines
1.7 KiB
TypeScript
36 lines
1.7 KiB
TypeScript
import request from './request';
|
|
|
|
export interface InstanceGroup {
|
|
id: number;
|
|
name: string;
|
|
description?: string;
|
|
db_type: string;
|
|
permissions?: string[];
|
|
access_type?: 'readonly' | 'datachange' | 'ddl';
|
|
allowed_databases?: string[];
|
|
is_active: boolean;
|
|
created_at?: string;
|
|
updated_at?: string;
|
|
instance_count?: number;
|
|
user_count?: number;
|
|
instances?: { id: number; name: string; db_type: string; host: string; port: number; env: string; status: string }[];
|
|
users?: { id: number; username: string; display_name: string; role: string }[];
|
|
}
|
|
|
|
export const instanceGroupApi = {
|
|
list: (params?: any) => request.get<any, InstanceGroup[]>('/instance-groups', { params }),
|
|
get: (id: number) => request.get<any, InstanceGroup>(`/instance-groups/${id}`),
|
|
create: (data: any) => request.post<any, InstanceGroup>('/instance-groups', data),
|
|
update: (id: number, data: any) => request.put<any, InstanceGroup>(`/instance-groups/${id}`, data),
|
|
delete: (id: number) => request.delete(`/instance-groups/${id}`),
|
|
assignInstances: (groupId: number, instanceIds: number[]) =>
|
|
request.post(`/instance-groups/${groupId}/instances`, { instance_ids: instanceIds }),
|
|
removeInstance: (groupId: number, instanceId: number) =>
|
|
request.delete(`/instance-groups/${groupId}/instances/${instanceId}`),
|
|
listUsers: (groupId: number) => request.get<any, any[]>(`/instance-groups/${groupId}/users`),
|
|
assignUsers: (groupId: number, userIds: number[], permissions?: string[]) =>
|
|
request.post(`/instance-groups/${groupId}/users`, { user_ids: userIds, permissions }),
|
|
updateUserGroups: (userId: number, groupIds: number[]) =>
|
|
request.put(`/instance-groups/users/${userId}/groups`, { group_ids: groupIds }),
|
|
};
|