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