| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- import { DataSource } from 'typeorm';
- import { RoleMt } from '../entities/role.entity';
- import { ConcreteCrudService } from '@d8d/shared-crud';
- export class RoleServiceMt extends ConcreteCrudService<RoleMt> {
- 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<RoleMt | null> {
- 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<boolean> {
- 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<RoleMt[]> {
- 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)}`);
- }
- }
- }
|