feat 数据权限支持用户组
This commit is contained in:
@@ -37,7 +37,6 @@ public class GetDataPermissionService : IGetDataPermissions, ISingletonDependenc
|
||||
db.Ignore<ITenantId>(() =>
|
||||
{
|
||||
var userDataPermissions = db.Queryable<DataPermissionEntity>()
|
||||
.Where(x => x.AssignType == AssignTypeEnumType.User)
|
||||
.Where(x => x.AssignValue == _currentUser.GetStringSubjectId())
|
||||
.ToList();
|
||||
|
||||
@@ -49,39 +48,60 @@ public class GetDataPermissionService : IGetDataPermissions, ISingletonDependenc
|
||||
.GetProperties()
|
||||
.FirstOrDefault(x => x.IsDefined(typeof(DeviceGroupCodeAttribute), false));
|
||||
|
||||
var deviceCodes = new List<Guid>();
|
||||
var userGroupCodeProperty = typeof(T)
|
||||
.GetProperties()
|
||||
.FirstOrDefault(x => x.IsDefined(typeof(UserGroupCodeAttribute), false));
|
||||
|
||||
//先计算分组权限下的设备
|
||||
var deviceGroupCodes = userDataPermissions.Where(x => x.UniqueType == DeviceAssignmentTypeEnumType.Group).Select(x => x.UniqueValue).ToList();
|
||||
if (deviceGroupCodes.Any())
|
||||
if (userGroupCodeProperty != null)
|
||||
{
|
||||
var data = db.Queryable<DeviceGroupEntity>().ToList();
|
||||
|
||||
var myDeviceGroupCodes = new List<Guid>();
|
||||
foreach (Guid deviceGroupCode in deviceGroupCodes)
|
||||
var data = db.Queryable<GainfoGroupEntity>().ToList();
|
||||
|
||||
var userGroupCodes = userDataPermissions.Where(x => x.UniqueType == DataPermissionAssignmentEnumType.UserGroup).Select(x => x.UniqueValue).ToList();
|
||||
var myCodes = new List<Guid>();
|
||||
foreach (var userGroupCode in userGroupCodes)
|
||||
{
|
||||
myDeviceGroupCodes.AddRange(RecursionHelper.HandlerDeviceGroupNextCodes(deviceGroupCode, data));
|
||||
myCodes.AddRange(RecursionHelper.HandlerGainfoGroupNextCodes(userGroupCode, data));
|
||||
}
|
||||
myCodes = myCodes.Distinct().ToList();
|
||||
|
||||
dict.Add(userGroupCodeProperty.Name, myCodes);
|
||||
}
|
||||
else
|
||||
{
|
||||
var deviceCodes = new List<Guid>();
|
||||
|
||||
//先计算分组权限下的设备
|
||||
var deviceGroupCodes = userDataPermissions.Where(x => x.UniqueType == DataPermissionAssignmentEnumType.Group).Select(x => x.UniqueValue).ToList();
|
||||
if (deviceGroupCodes.Any())
|
||||
{
|
||||
var data = db.Queryable<DeviceGroupEntity>().ToList();
|
||||
|
||||
var myCodes = new List<Guid>();
|
||||
foreach (Guid deviceGroupCode in deviceGroupCodes)
|
||||
{
|
||||
myCodes.AddRange(RecursionHelper.HandlerDeviceGroupNextCodes(deviceGroupCode, data));
|
||||
}
|
||||
|
||||
myCodes = myCodes.Distinct().ToList();
|
||||
|
||||
if (deviceCodeProperty != null)
|
||||
{
|
||||
deviceCodes = db.Queryable<DeviceGroupRelationshipEntity>().Where(x => myCodes.Contains(x.GroupCode)).Select(x => x.DeviceCode).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
myDeviceGroupCodes = myDeviceGroupCodes.Distinct().ToList();
|
||||
if (deviceGroupCodeProperty != null)
|
||||
{
|
||||
dict.Add(deviceGroupCodeProperty.Name, deviceGroupCodes);
|
||||
}
|
||||
|
||||
if (deviceCodeProperty != null)
|
||||
{
|
||||
deviceCodes = db.Queryable<DeviceGroupRelationshipEntity>().Where(x => myDeviceGroupCodes.Contains(x.GroupCode)).Select(x => x.DeviceCode).ToList();
|
||||
var currentDeviceCodes = userDataPermissions.Where(x => x.UniqueType == DataPermissionAssignmentEnumType.Device).Select(x => x.UniqueValue).ToList();
|
||||
deviceCodes.AddRange(currentDeviceCodes);
|
||||
dict.Add(deviceCodeProperty.Name, deviceCodes.Distinct().ToList());
|
||||
}
|
||||
}
|
||||
|
||||
if (deviceGroupCodeProperty != null)
|
||||
{
|
||||
dict.Add(deviceGroupCodeProperty.Name, deviceGroupCodes);
|
||||
}
|
||||
|
||||
if (deviceCodeProperty != null)
|
||||
{
|
||||
var currentDeviceCodes = userDataPermissions.Where(x => x.UniqueType == DeviceAssignmentTypeEnumType.Device).Select(x => x.UniqueValue).ToList();
|
||||
deviceCodes.AddRange(currentDeviceCodes);
|
||||
dict.Add(deviceCodeProperty.Name, deviceCodes.Distinct().ToList());
|
||||
}
|
||||
});
|
||||
|
||||
return dict;
|
||||
|
||||
@@ -30,6 +30,7 @@ public class GainfoGroupsController : ControllerBase
|
||||
/// <returns></returns>
|
||||
[HttpGet("tree")]
|
||||
[IgnoreTenant]
|
||||
[DataPermission]
|
||||
public async Task<List<GainfoGroupTreeResponse>> GetTreeAsync()
|
||||
{
|
||||
return await _gainfoGroupService.GetTreeAsync();
|
||||
|
||||
@@ -55,6 +55,15 @@ public class GainfoGroupService : IGainfoGroupService
|
||||
var entity = request.Adapt<GainfoGroupEntity>();
|
||||
entity.Code = Guid.NewGuid();
|
||||
await _dbContext.InsertAsync(entity);
|
||||
|
||||
await _dbContext.InsertAsync(new DataPermissionEntity
|
||||
{
|
||||
AssignValue = _currentUser.GetStringSubjectId(),
|
||||
UniqueType = DataPermissionAssignmentEnumType.UserGroup,
|
||||
UniqueValue = entity.Code,
|
||||
DeviceType = null,
|
||||
TenantId = _currentUser.GetStringTenantId()
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user