fix 分配/获取权限优化
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -15,7 +15,7 @@ public class DevicePageRequest : PageDto
|
||||
/// 设备分类 DeviceTypeEnumType
|
||||
/// </summary>
|
||||
[EnumDataType(typeof(DeviceTypeEnumType))]
|
||||
public DeviceTypeEnumType? Type { get; set; }
|
||||
public DeviceTypeEnumType Type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 启用状态
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user