fix 分配/获取权限优化

This commit is contained in:
2024-07-11 12:20:41 +08:00
parent f9a7049c06
commit a865a7425a
5 changed files with 22 additions and 15 deletions

View File

@@ -54,7 +54,7 @@ public class DevicePermissionsController : ControllerBase
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[DataPermission]
[DataPermission(ignoreTenant: true, includeCustom: true)]
[HttpGet("assignments")]
public async Task<List<Guid>> GetAssignmentsAsync([FromQuery] DeviceGetAssignmentsRequest request)
{
@@ -72,7 +72,7 @@ public class DevicePermissionsController : ControllerBase
{
return await _devicePermissionService.GetAssignmentUniqueAsync(request);
}
/// <summary>
/// 获取设备下人员分页
/// </summary>

View File

@@ -88,7 +88,7 @@ public class DevicesController : ControllerBase
/// <param name="request"></param>
/// <returns></returns>
[HttpGet("page")]
[DataPermission(ignoreTenant: true, true)]
[DataPermission(ignoreTenant: true, includeCustom: true)]
public async Task<Pagination<DevicePageResponse>> GetPageAsync([FromQuery] DevicePageRequest request)
{
return await _deviceService.GetPageAsync(request);

View File

@@ -15,7 +15,7 @@ public class DevicePageRequest : PageDto
/// 设备分类 DeviceTypeEnumType
/// </summary>
[EnumDataType(typeof(DeviceTypeEnumType))]
public DeviceTypeEnumType? Type { get; set; }
public DeviceTypeEnumType Type { get; set; }
/// <summary>
/// 启用状态

View File

@@ -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<DevicePermissionEntity>()
.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<DevicePermissionEntity>()
.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<List<Guid>> 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<DevicePermissionEntity>()
.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();
}

View File

@@ -39,7 +39,7 @@ public class DeviceService : IDeviceService
.LeftJoin<DeviceRegistryEntity>((d, dt, dr) => d.UniqueNo == dr.DeviceUniqueNo)
.LeftJoin<BusinessPlaceEntity>((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