diff --git a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs index 574f06e0..f6ba8c1b 100644 --- a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs +++ b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs @@ -54,7 +54,7 @@ public class DevicePermissionsController : ControllerBase /// /// /// - [DataPermission] + [DataPermission(ignoreTenant: true, includeCustom: true)] [HttpGet("assignments")] public async Task> GetAssignmentsAsync([FromQuery] DeviceGetAssignmentsRequest request) { @@ -72,7 +72,7 @@ public class DevicePermissionsController : ControllerBase { return await _devicePermissionService.GetAssignmentUniqueAsync(request); } - + /// /// 获取设备下人员分页 /// diff --git a/Src/Dlhis.Basic/Device/Controllers/DevicesController.cs b/Src/Dlhis.Basic/Device/Controllers/DevicesController.cs index 4072f04e..e24cc7b7 100644 --- a/Src/Dlhis.Basic/Device/Controllers/DevicesController.cs +++ b/Src/Dlhis.Basic/Device/Controllers/DevicesController.cs @@ -88,7 +88,7 @@ public class DevicesController : ControllerBase /// /// [HttpGet("page")] - [DataPermission(ignoreTenant: true, true)] + [DataPermission(ignoreTenant: true, includeCustom: true)] public async Task> GetPageAsync([FromQuery] DevicePageRequest request) { return await _deviceService.GetPageAsync(request); diff --git a/Src/Dlhis.Basic/Device/Request/DevicePageRequest.cs b/Src/Dlhis.Basic/Device/Request/DevicePageRequest.cs index 341af685..9f15d865 100644 --- a/Src/Dlhis.Basic/Device/Request/DevicePageRequest.cs +++ b/Src/Dlhis.Basic/Device/Request/DevicePageRequest.cs @@ -15,7 +15,7 @@ public class DevicePageRequest : PageDto /// 设备分类 DeviceTypeEnumType /// [EnumDataType(typeof(DeviceTypeEnumType))] - public DeviceTypeEnumType? Type { get; set; } + public DeviceTypeEnumType Type { get; set; } /// /// 启用状态 diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs index 7535669d..7c7350d4 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs @@ -35,17 +35,21 @@ public class DevicePermissionService : IDevicePermissionService public async Task AssignAsync(DevicePermissionSaveRequest request) { - var tenantId = request.AssignType == AssignTypeEnumType.Department ? request.TenantId : _currentUser.GetStringTenantId(); - await GenerateDeviceTasksAsync(async () => { + var currentTenantId = request.AssignType == AssignTypeEnumType.Department ? request.TenantId : _currentUser.GetStringTenantId(); + var role = _currentUser.GetRole(); + var isAll = role is "admin" or "tenant-admin"; + var deviceCodes = _myDataPermissionService.GetMyDeviceCodes(); + //删除当前匹配的基地权限 var p = await _dbContext.Queryable() .Where(x => x.AssignType == request.AssignType) .Where(x => x.AssignValue == request.AssignValue) .Where(x => x.UniqueType == request.UniqueType) + .WhereIF(request.UniqueType == DeviceAssignmentTypeEnumType.Device && isAll, x => deviceCodes.Contains(x.UniqueValue)) .Where(x => x.Type == request.Type) - .Where(x => x.TenantId == tenantId) + .Where(x => x.TenantId == currentTenantId) .ToListAsync(); await _dbContext.DeleteAsync(p); @@ -60,7 +64,7 @@ public class DevicePermissionService : IDevicePermissionService UniqueType = request.UniqueType, UniqueValue = code, Type = request.Type, - TenantId = tenantId + TenantId = currentTenantId }).ToList(); await _dbContext.InsertAsync(devicePermissions); @@ -72,17 +76,15 @@ public class DevicePermissionService : IDevicePermissionService { await GenerateDeviceTasksAsync(async () => { - var tenantId = _currentUser.GetStringTenantId(); - var deviceCodes = _myDataPermissionService.GetMyDeviceCodes(); + var currentTenantId = _currentUser.GetStringTenantId(); //删除当前匹配的基地权限 var p = await _dbContext.Queryable() .Where(x => x.UniqueType == request.UniqueType) - .WhereIF(request.UniqueType == DeviceAssignmentTypeEnumType.Device, x => deviceCodes.Contains(x.UniqueValue)) .Where(x => x.UniqueValue == request.UniqueValue) .Where(x => x.AssignType == request.AssignType) .Where(x => x.Type == request.Type) - .Where(x => x.TenantId == tenantId) + .Where(x => x.TenantId == currentTenantId) .ToListAsync(); await _dbContext.DeleteAsync(p); @@ -103,7 +105,7 @@ public class DevicePermissionService : IDevicePermissionService UniqueValue = request.UniqueValue, AssignType = request.AssignType, AssignValue = v, - TenantId = tenantId, + TenantId = currentTenantId, Type = request.Type }).ToList(); @@ -114,14 +116,19 @@ public class DevicePermissionService : IDevicePermissionService public async Task> GetAssignmentsAsync(DeviceGetAssignmentsRequest request) { + var currentTenantId = _currentUser.GetStringTenantId(); + var role = _currentUser.GetRole(); + var isAll = role is "admin" or "tenant-admin"; var deviceCodes = _myDataPermissionService.GetMyDeviceCodes(); + return await _dbContext.Queryable() .WhereIF(request.TenantId.IsPresent() && request.AssignType == AssignTypeEnumType.Department, x => x.TenantId == request.TenantId) .Where(x => x.AssignType == request.AssignType) .Where(x => x.AssignValue == request.AssignValue) .Where(x => x.UniqueType == request.UniqueType) - .WhereIF(request.UniqueType == DeviceAssignmentTypeEnumType.Device, x => deviceCodes.Contains(x.UniqueValue)) + .WhereIF(request.UniqueType == DeviceAssignmentTypeEnumType.Device && !isAll, x => deviceCodes.Contains(x.UniqueValue)) .Where(x => x.Type == request.Type) + .Where(x => x.TenantId == currentTenantId) .Select(x => x.UniqueValue) .ToListAsync(); } diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs index e096020d..2b21701f 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs @@ -39,7 +39,7 @@ public class DeviceService : IDeviceService .LeftJoin((d, dt, dr) => d.UniqueNo == dr.DeviceUniqueNo) .LeftJoin((d, dt, dr, bp) => dr.BusinessPlaceCode == bp.Code) .Where(d => tenantId == d.TenantId) - .WhereIF(request.Type.HasValue, (d, dt) => d.Type == request.Type) + .Where((d, dt) => d.Type == request.Type) .WhereIF(request.Enable.HasValue, (d, dt) => d.Enable == request.Enable) .WhereIF(request.Search.IsPresent(), d => d.UniqueNo == request.Search || d.DeployPlace.Contains(request.Search)) .Select((d, dt, dr, bp) => new DevicePageResponse