import { DataSource } from 'typeorm'; import { RoleMt } from '../entities/role.entity'; import { ConcreteCrudService } from '@d8d/shared-crud'; export class RoleServiceMt extends ConcreteCrudService { constructor(dataSource: DataSource) { super(RoleMt, { userTracking: { enabled: true, createdByField: 'createdBy', updatedByField: 'updatedBy' }, tenantOptions: { enabled: true, tenantIdField: 'tenantId', autoExtractFromContext: false } }); } /** * 根据角色名获取角色(自动添加租户过滤) */ async getRoleByName(name: string, tenantId?: number): Promise { try { const where: any = { name }; // 如果提供了租户ID,添加租户过滤 if (tenantId !== undefined) { where.tenantId = tenantId; } const roles = await this.repository.find({ where }); return roles.length > 0 ? roles[0] : null; } catch (error) { console.error('Error getting role by name:', error); throw new Error('Failed to get role by name'); } } /** * 检查角色是否拥有指定权限 */ async hasPermission(roleId: number, permission: string, tenantId?: number): Promise { try { const role = await this.getById(roleId); if (!role) return false; // 验证租户一致性 if (tenantId !== undefined && role.tenantId !== tenantId) { throw new Error('无权操作该角色'); } return role.permissions.includes(permission); } catch (error) { console.error('Error checking permission:', error); throw new Error('Failed to check permission'); } } /** * 获取所有角色(自动添加租户过滤) */ async getRoles(tenantId?: number): Promise { try { const where: any = {}; // 如果提供了租户ID,添加租户过滤 if (tenantId !== undefined) { where.tenantId = tenantId; } return await this.repository.find({ where }); } catch (error) { console.error('Error getting roles:', error); throw new Error(`Failed to get roles: ${error instanceof Error ? error.message : String(error)}`); } } }