暂存字段权限更改
This commit is contained in:
@@ -1,14 +1,11 @@
|
||||
using ZR.Service;
|
||||
using ZR.ServiceCore.Model;
|
||||
using ZR.ServiceCore.Model.Dto;
|
||||
|
||||
namespace ZR.ServiceCore.Services.IService;
|
||||
|
||||
public interface ISysFieldService : IBaseService<SysField>
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public interface ISysRoleFieldService : IBaseService<SysRoleField>
|
||||
{
|
||||
|
||||
Task<List<SysFieldDto>> GetFields(string fullName, long roleId);
|
||||
Task<bool> InitFields();
|
||||
}
|
||||
@@ -1,6 +1,10 @@
|
||||
namespace ZR.ServiceCore.Services.IService;
|
||||
using ZR.Service;
|
||||
using ZR.ServiceCore.Model;
|
||||
using ZR.ServiceCore.Model.Dto;
|
||||
|
||||
public class ISysRoleFieldService
|
||||
namespace ZR.ServiceCore.Services.IService;
|
||||
|
||||
public interface ISysRoleFieldService : IBaseService<SysRoleField>
|
||||
{
|
||||
|
||||
Task<bool> InsertOrUpdateSysRoleField(List<SysFieldDto> sysFieldDtos, long roleId);
|
||||
}
|
||||
@@ -1,12 +1,93 @@
|
||||
using Infrastructure.Attribute;
|
||||
using ZR.Service;
|
||||
using ZR.ServiceCore.Model;
|
||||
using ZR.ServiceCore.Model.Dto;
|
||||
using ZR.ServiceCore.Services.IService;
|
||||
|
||||
namespace ZR.ServiceCore.Services;
|
||||
[AppService(ServiceType = typeof(ISysFieldService), ServiceLifetime = LifeTime.Transient)]
|
||||
public class SysFieldService : BaseService<SysField>, ISysFieldService
|
||||
{
|
||||
|
||||
private readonly ISysRoleFieldService _sysRoleFieldService;
|
||||
|
||||
public SysFieldService(ISysRoleFieldService sysRoleFieldService)
|
||||
{
|
||||
_sysRoleFieldService = sysRoleFieldService;
|
||||
}
|
||||
|
||||
public async Task<List<SysFieldDto>> GetFields(string fullName, long roleId)
|
||||
{
|
||||
var fields = await Queryable()
|
||||
.Where(it => it.FullName == fullName)
|
||||
.ToListAsync();
|
||||
var roleFields = await _sysRoleFieldService
|
||||
.Queryable()
|
||||
.Where(it => it.RoleId == roleId)
|
||||
.Select(it => it.FieldId)
|
||||
.ToListAsync();
|
||||
var list = fields.Select(it => new SysFieldDto
|
||||
{
|
||||
FieldName = it.FieldName,
|
||||
FieldType = it.FieldType,
|
||||
FullName = it.FullName,
|
||||
Id = it.Id,
|
||||
IsClass = it.IsClass,
|
||||
IsPermission = !roleFields.Contains(it.Id)
|
||||
}).ToList();
|
||||
return list;
|
||||
}
|
||||
|
||||
public async Task<bool> InitFields()
|
||||
{
|
||||
var serviceCoreModels = AppDomain.CurrentDomain
|
||||
.GetAssemblies()
|
||||
.First(it => it.FullName.Contains("ZR.ServiceCore"))
|
||||
.ExportedTypes
|
||||
.Where(p => p.FullName.StartsWith("ZR.ServiceCore.Model"))
|
||||
.Select(it => new
|
||||
{
|
||||
it.FullName,
|
||||
Properties = it.GetProperties().Select(pt => new
|
||||
{
|
||||
FieldName = pt.Name,
|
||||
FieldType = pt.PropertyType.FullName,
|
||||
IsClass = pt.PropertyType.IsClass,
|
||||
IsArray = pt.PropertyType.IsArray,
|
||||
// IsList = pt.PropertyType.IsClass ? pt.DeclaringType.FullName : string.Empty
|
||||
}).ToList()
|
||||
// Properties = it.GetProperties()
|
||||
})
|
||||
.ToList();
|
||||
|
||||
foreach (var serviceCoreModel in serviceCoreModels)
|
||||
{
|
||||
var sysFields = serviceCoreModel.Properties
|
||||
.Select(property => new SysField
|
||||
{
|
||||
FieldName = property.FieldName,
|
||||
FullName = serviceCoreModel.FullName,
|
||||
FieldType = property.FieldType,
|
||||
IsClass = property.IsClass ? "1" : "0"
|
||||
}).ToList();
|
||||
await Deleteable()
|
||||
.Where(it =>
|
||||
!sysFields.Select(sf => sf.FieldName)
|
||||
.ToArray().Contains(it.FieldName))
|
||||
.Where(it => it.FullName == serviceCoreModel.FullName)
|
||||
.ExecuteCommandAsync();
|
||||
var sysFieldStore = await Storageable(sysFields)
|
||||
.WhereColumns(it => new { it.FieldName, it.FullName })
|
||||
.ToStorageAsync();
|
||||
await sysFieldStore
|
||||
.AsInsertable
|
||||
.ExecuteReturnSnowflakeIdListAsync();
|
||||
await sysFieldStore
|
||||
.AsUpdateable
|
||||
.IgnoreColumns(it => it.Id)
|
||||
.ExecuteCommandAsync();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,57 @@
|
||||
using Infrastructure.Attribute;
|
||||
using ZR.Service;
|
||||
using ZR.ServiceCore.Model;
|
||||
using ZR.ServiceCore.Model.Dto;
|
||||
using ZR.ServiceCore.Services.IService;
|
||||
|
||||
namespace ZR.ServiceCore.Services;
|
||||
[AppService(ServiceType = typeof(ISysRoleFieldService), ServiceLifetime = LifeTime.Transient)]
|
||||
public class SysRoleFieldService : BaseService<SysRoleField>, ISysRoleFieldService
|
||||
{
|
||||
|
||||
public async Task<bool> InsertOrUpdateSysRoleField(List<SysFieldDto> sysFieldDtos, long roleId)
|
||||
{
|
||||
try
|
||||
{
|
||||
await Context.Ado.BeginTranAsync();
|
||||
await Deleteable()
|
||||
.Where(it => it.RoleId == roleId)
|
||||
.Where(it => sysFieldDtos.Select(sf => sf.Id).ToArray()
|
||||
.Contains(it.FieldId))
|
||||
.ExecuteCommandAsync();
|
||||
var ids = sysFieldDtos
|
||||
.Where(it => it.IsPermission != true)
|
||||
.Select(it => new SysRoleField
|
||||
{
|
||||
FieldId = it.Id,
|
||||
RoleId = roleId
|
||||
})
|
||||
.ToList();
|
||||
await Insertable(ids).ExecuteCommandAsync();
|
||||
await Context.Ado.CommitTranAsync();
|
||||
return true;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e);
|
||||
await Context.Ado.RollbackTranAsync();
|
||||
throw;
|
||||
}
|
||||
// var list = await
|
||||
// Queryable()
|
||||
// .LeftJoin<SysField>((rf, f) => rf.FieldId == f.Id)
|
||||
// .Where((rf, f) => rf.RoleId == roleId && f.FullName == sysFieldDtos[0].FullName)
|
||||
// .ToListAsync();
|
||||
//
|
||||
//
|
||||
// list.AddRange(ids);
|
||||
// list = list.Distinct().ToList();
|
||||
// var sysRoleFieldStore = await
|
||||
// Storageable(ids)
|
||||
// .WhereColumns(it => new { it.FieldId, it.RoleId })
|
||||
// .ToStorageAsync();
|
||||
// await sysRoleFieldStore.AsInsertable.ExecuteCommandAsync();
|
||||
// await sysRoleFieldStore.AsUpdateable.ExecuteCommandAsync();
|
||||
// await sysRoleFieldStore.AsDeleteable.ExecuteCommandAsync();
|
||||
// return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user