当前系统已经支持查看自己客户的功能,通过以下机制实现:
在客户表 client 中:
responsible_user_id 字段直接关联到 users.id// 当前ClientService中的实现(已存在)
export class ClientService extends GenericCrudService<Client> {
async findAll(filters: any, user?: UserEntity): Promise<[Client[], number]> {
const query = this.repository.createQueryBuilder('client');
// 如果用户不是管理员,只显示自己的客户
if (user && !user.roles.some(r => r.name === 'admin')) {
query.andWhere('client.responsible_user_id = :userId', { userId: user.id });
}
// 其他过滤条件...
return query.getManyAndCount();
}
}
// 当前客户列表页面中的权限控制
const { user } = useAuth();
const isAdmin = user?.roles?.some(r => r.name === 'admin');
// 在查询参数中自动添加用户过滤
const queryParams = {
...filters,
...(isAdmin ? {} : { responsible_user_id: user?.id })
};
// 客户详情权限检查
const canViewClient = (client: Client, user: UserEntity) => {
return user.roles.some(r => r.name === 'admin') ||
client.responsible_user_id === user.id;
};
// 客户关联数据权限
const canViewClientDetails = (clientId: number, user: UserEntity) => {
// 检查客户是否属于当前用户
const client = clientService.findById(clientId);
return canViewClient(client, user);
};
responsible_user_id = 当前用户ID 的客户✅ 查看自己的客户: 通过 responsible_user_id 实现
✅ 查看客户详情: 权限检查确保只能看自己的客户
✅ 查看关联数据: 所有关联表都通过客户ID进行权限控制
✅ 数据隔离: 不同用户的客户数据完全隔离
-- 普通用户查询自己的客户
SELECT * FROM client
WHERE responsible_user_id = 当前用户ID
AND is_deleted = 0;
-- 管理员查看所有客户
SELECT * FROM client
WHERE is_deleted = 0;
当前系统已完全支持"查看自己客户"的功能,通过以下机制实现:
responsible_user_id 字段建立用户-客户关联该功能已在现有代码中实现并正常运行,无需额外开发。