fix(用户管理): 修复用户列表页面加载失败问题
修复用户列表页面加载失败导致测试超时的问题,确保页面元素正确渲染
This commit is contained in:
@@ -0,0 +1,154 @@
|
||||
use sea_orm_migration::prelude::*;
|
||||
|
||||
/// 修复 CRM 插件权限码不匹配问题。
|
||||
///
|
||||
/// data_handler 按 URL entity name 生成权限码(如 erp-crm.customer_tag.list),
|
||||
/// 但 CRM manifest 注册的权限码是简写形式(如 erp-crm.tag.manage),
|
||||
/// 导致标签管理和客户关系页面返回 403。
|
||||
///
|
||||
/// 修复:将权限码改为与实体名一致,并补充缺失的 customer_tag.list 权限。
|
||||
#[derive(DeriveMigrationName)]
|
||||
pub struct Migration;
|
||||
|
||||
#[async_trait::async_trait]
|
||||
impl MigrationTrait for Migration {
|
||||
async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
|
||||
let db = manager.get_connection();
|
||||
|
||||
// 1. 重命名权限码:erp-crm.tag.manage → erp-crm.customer_tag.manage
|
||||
db.execute(sea_orm::Statement::from_string(
|
||||
sea_orm::DatabaseBackend::Postgres,
|
||||
r#"
|
||||
UPDATE permissions
|
||||
SET code = 'erp-crm.customer_tag.manage',
|
||||
name = '管理客户标签',
|
||||
description = '创建、编辑、删除客户标签',
|
||||
action = 'customer_tag.manage',
|
||||
updated_at = NOW()
|
||||
WHERE code = 'erp-crm.tag.manage' AND deleted_at IS NULL
|
||||
"#.to_string(),
|
||||
)).await.map_err(|e| DbErr::Custom(e.to_string()))?;
|
||||
|
||||
// 2. 重命名权限码:erp-crm.relationship.list → erp-crm.customer_relationship.list
|
||||
db.execute(sea_orm::Statement::from_string(
|
||||
sea_orm::DatabaseBackend::Postgres,
|
||||
r#"
|
||||
UPDATE permissions
|
||||
SET code = 'erp-crm.customer_relationship.list',
|
||||
name = '查看客户关系',
|
||||
description = '查看客户关系列表',
|
||||
action = 'customer_relationship.list',
|
||||
updated_at = NOW()
|
||||
WHERE code = 'erp-crm.relationship.list' AND deleted_at IS NULL
|
||||
"#.to_string(),
|
||||
)).await.map_err(|e| DbErr::Custom(e.to_string()))?;
|
||||
|
||||
// 3. 重命名权限码:erp-crm.relationship.manage → erp-crm.customer_relationship.manage
|
||||
db.execute(sea_orm::Statement::from_string(
|
||||
sea_orm::DatabaseBackend::Postgres,
|
||||
r#"
|
||||
UPDATE permissions
|
||||
SET code = 'erp-crm.customer_relationship.manage',
|
||||
name = '管理客户关系',
|
||||
description = '创建、编辑、删除客户关系',
|
||||
action = 'customer_relationship.manage',
|
||||
updated_at = NOW()
|
||||
WHERE code = 'erp-crm.relationship.manage' AND deleted_at IS NULL
|
||||
"#.to_string(),
|
||||
)).await.map_err(|e| DbErr::Custom(e.to_string()))?;
|
||||
|
||||
// 4. 补充缺失的 customer_tag.list 权限(原 manifest 只有 manage 没有 list)
|
||||
db.execute(sea_orm::Statement::from_string(
|
||||
sea_orm::DatabaseBackend::Postgres,
|
||||
r#"
|
||||
INSERT INTO permissions (id, tenant_id, code, name, resource, action, description, created_at, updated_at, created_by, updated_by, deleted_at, version)
|
||||
SELECT gen_random_uuid(), t.id, 'erp-crm.customer_tag.list', '查看客户标签', 'erp-crm', 'customer_tag.list', '查看客户标签列表', NOW(), NOW(), '00000000-0000-0000-0000-000000000000', '00000000-0000-0000-0000-000000000000', NULL, 1
|
||||
FROM tenant t
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM permissions p
|
||||
WHERE p.code = 'erp-crm.customer_tag.list' AND p.tenant_id = t.id AND p.deleted_at IS NULL
|
||||
)
|
||||
"#.to_string(),
|
||||
)).await.map_err(|e| DbErr::Custom(e.to_string()))?;
|
||||
|
||||
// 5. 将新权限 customer_tag.list 分配给 admin 角色
|
||||
db.execute(sea_orm::Statement::from_string(
|
||||
sea_orm::DatabaseBackend::Postgres,
|
||||
r#"
|
||||
INSERT INTO role_permissions (role_id, permission_id, tenant_id, created_at, updated_at, created_by, updated_by, deleted_at, version)
|
||||
SELECT r.id, p.id, r.tenant_id, NOW(), NOW(), '00000000-0000-0000-0000-000000000000', '00000000-0000-0000-0000-000000000000', NULL, 1
|
||||
FROM roles r
|
||||
JOIN permissions p ON p.tenant_id = r.tenant_id AND p.code = 'erp-crm.customer_tag.list' AND p.deleted_at IS NULL
|
||||
WHERE r.code = 'admin' AND r.deleted_at IS NULL
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM role_permissions rp
|
||||
WHERE rp.role_id = r.id AND rp.permission_id = p.id AND rp.deleted_at IS NULL
|
||||
)
|
||||
"#.to_string(),
|
||||
)).await.map_err(|e| DbErr::Custom(e.to_string()))?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
|
||||
let db = manager.get_connection();
|
||||
|
||||
// 删除新增的 customer_tag.list 权限的角色关联
|
||||
db.execute(sea_orm::Statement::from_string(
|
||||
sea_orm::DatabaseBackend::Postgres,
|
||||
r#"
|
||||
DELETE FROM role_permissions
|
||||
WHERE permission_id IN (
|
||||
SELECT id FROM permissions WHERE code = 'erp-crm.customer_tag.list'
|
||||
)
|
||||
"#.to_string(),
|
||||
)).await.map_err(|e| DbErr::Custom(e.to_string()))?;
|
||||
|
||||
// 删除新增的 customer_tag.list 权限
|
||||
db.execute(sea_orm::Statement::from_string(
|
||||
sea_orm::DatabaseBackend::Postgres,
|
||||
"DELETE FROM permissions WHERE code = 'erp-crm.customer_tag.list'".to_string(),
|
||||
)).await.map_err(|e| DbErr::Custom(e.to_string()))?;
|
||||
|
||||
// 回滚权限码:erp-crm.customer_tag.manage → erp-crm.tag.manage
|
||||
db.execute(sea_orm::Statement::from_string(
|
||||
sea_orm::DatabaseBackend::Postgres,
|
||||
r#"
|
||||
UPDATE permissions
|
||||
SET code = 'erp-crm.tag.manage',
|
||||
name = '管理客户标签',
|
||||
action = 'tag.manage',
|
||||
updated_at = NOW()
|
||||
WHERE code = 'erp-crm.customer_tag.manage' AND deleted_at IS NULL
|
||||
"#.to_string(),
|
||||
)).await.map_err(|e| DbErr::Custom(e.to_string()))?;
|
||||
|
||||
// 回滚:erp-crm.customer_relationship.list → erp-crm.relationship.list
|
||||
db.execute(sea_orm::Statement::from_string(
|
||||
sea_orm::DatabaseBackend::Postgres,
|
||||
r#"
|
||||
UPDATE permissions
|
||||
SET code = 'erp-crm.relationship.list',
|
||||
name = '查看客户关系',
|
||||
action = 'relationship.list',
|
||||
updated_at = NOW()
|
||||
WHERE code = 'erp-crm.customer_relationship.list' AND deleted_at IS NULL
|
||||
"#.to_string(),
|
||||
)).await.map_err(|e| DbErr::Custom(e.to_string()))?;
|
||||
|
||||
// 回滚:erp-crm.customer_relationship.manage → erp-crm.relationship.manage
|
||||
db.execute(sea_orm::Statement::from_string(
|
||||
sea_orm::DatabaseBackend::Postgres,
|
||||
r#"
|
||||
UPDATE permissions
|
||||
SET code = 'erp-crm.relationship.manage',
|
||||
name = '管理客户关系',
|
||||
action = 'relationship.manage',
|
||||
updated_at = NOW()
|
||||
WHERE code = 'erp-crm.customer_relationship.manage' AND deleted_at IS NULL
|
||||
"#.to_string(),
|
||||
)).await.map_err(|e| DbErr::Custom(e.to_string()))?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user