ow
This commit is contained in:
1 parent
04c69d4941
commit
4f57b65451
15 files changed
+2338
-24
No files matched your search
@@ -1,11 +1,15 @@
|
||||
|
||||
using CloudBuilder.Core.DatabaseAccessor;
|
||||
using CloudBuilder.Core.DatabaseAccessor.Entity;
|
||||
using CloudBuilder.Core.Extensions;
|
||||
using CloudBuilder.Core.Service;
|
||||
using CloudBuilder.Security.Data;
|
||||
using CloudBuilder.Security.Entity;
|
||||
using CloudBuilder.Security.Policy;
|
||||
using CloudBuilder.Security.SearchCriteria;
|
||||
using CloudBuilder.Security.Utility;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
namespace CloudBuilder.Security.Service
|
||||
{
|
||||
public class SecurityHelpFunctionService : ISecurityHelpFunctionService
|
||||
@@ -20,10 +24,12 @@ namespace CloudBuilder.Security.Service
|
||||
}
|
||||
|
||||
[PermissionOperate(name: SecurityPermissionPolicy.SecurityHelpFunction, operate: Operate.Find)]
|
||||
public SecurityHelpFunctionEntity FindByKey(string key)
|
||||
public SecurityHelpFunctionData FindByKey(string key)
|
||||
{
|
||||
return repository.DetachedEntities.Where(x => x.HelpFunctionId == key).FirstOrDefault()!;
|
||||
return FindByFunctionName(key);
|
||||
}
|
||||
|
||||
|
||||
[AllowAnonymous]
|
||||
public SecurityHelpFunctionData FindAll()
|
||||
{
|
||||
@@ -42,10 +48,103 @@ namespace CloudBuilder.Security.Service
|
||||
return data;
|
||||
}
|
||||
|
||||
//[PermissionOperate(name: SecurityPermissionPolicy.SecurityHelpFunction, operate: Operate.Find)]
|
||||
public dynamic FindBySearchCriteria(SecurityHelpFunctionSearchCriteria criteria)
|
||||
[PermissionOperate(name: SecurityPermissionPolicy.SecurityHelpFunction, operate: Operate.Find)]
|
||||
public SecurityHelpFunctionResultData FindBySearchCriteria(SecurityHelpFunctionSearchCriteria criteria)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
SecurityHelpFunctionResultData data = new SecurityHelpFunctionResultData();
|
||||
SecurityHelpFunctionEntity[] list = null;
|
||||
|
||||
Int64 count = 0;
|
||||
|
||||
string sqlWhere = null;
|
||||
|
||||
if (criteria.Filter != null && criteria.Filter.Length > 0)
|
||||
{
|
||||
sqlWhere = SearchFilter.ComposeWhereClause(criteria.Filter);
|
||||
}
|
||||
|
||||
SecurityHelpFunctionEntity entity = SecurityHelpFunctionEntity.GetInstance(repository.GetDbContext().Database.ProviderName);
|
||||
string sql = entity.GetSelectTopFrom(criteria.limit, criteria.page, criteria.orderby.StringToDbField(), criteria.orderbytag, sqlWhere);
|
||||
|
||||
string err = null;
|
||||
try
|
||||
{
|
||||
list = repository.FromSql(sql).ToArray();
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
err = ex.Message;
|
||||
}
|
||||
|
||||
if (list != null && list.Length > 0)
|
||||
{
|
||||
sql = entity.GetSelectCountFrom(sqlWhere);
|
||||
count = Convert.ToInt64(repository.ExecuteScalar(sql));
|
||||
|
||||
data.Datas = list;
|
||||
}
|
||||
else
|
||||
{
|
||||
data.Datas = null;
|
||||
}
|
||||
|
||||
data.Limit = criteria.limit;
|
||||
data.Page = criteria.page;
|
||||
|
||||
data.Total = count;
|
||||
data.ErrorMessage = err;
|
||||
return data;
|
||||
}
|
||||
|
||||
[PermissionOperate(name: SecurityPermissionPolicy.SecurityHelpFunction, operate: Operate.Find)]
|
||||
public SecurityHelpFunctionResultData FindFeatureBySearchCriteria(SecurityHelpFunctionSearchCriteria criteria)
|
||||
{
|
||||
SecurityHelpFunctionResultData data = new SecurityHelpFunctionResultData();
|
||||
|
||||
IRepository<SecurityHelpFeatureEntity> repositoryFeature = repository.GetRepository<IRepository<SecurityHelpFeatureEntity>>();
|
||||
|
||||
SecurityHelpFeatureEntity[] list = null;
|
||||
|
||||
Int64 count = 0;
|
||||
|
||||
string sqlWhere = null;
|
||||
|
||||
if (criteria.Filter != null && criteria.Filter.Length > 0)
|
||||
{
|
||||
sqlWhere = SearchFilter.ComposeWhereClause(criteria.Filter);
|
||||
}
|
||||
|
||||
SecurityHelpFeatureEntity entity = SecurityHelpFeatureEntity.GetInstance(repositoryFeature.GetDbContext().Database.ProviderName);
|
||||
string sql = entity.GetSelectTopFrom(criteria.limit, criteria.page, criteria.orderby.StringToDbField(), criteria.orderbytag, sqlWhere);
|
||||
|
||||
string err = null;
|
||||
try
|
||||
{
|
||||
list = repositoryFeature.FromSql(sql).ToArray();
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
err = ex.Message;
|
||||
}
|
||||
|
||||
if (list != null && list.Length > 0)
|
||||
{
|
||||
sql = entity.GetSelectCountFrom(sqlWhere);
|
||||
count = Convert.ToInt64(repositoryFeature.ExecuteScalar(sql));
|
||||
|
||||
data.Features = list;
|
||||
}
|
||||
else
|
||||
{
|
||||
data.Features = null;
|
||||
}
|
||||
|
||||
data.Limit = criteria.limit;
|
||||
data.Page = criteria.page;
|
||||
|
||||
data.Total = count;
|
||||
data.ErrorMessage = err;
|
||||
return data;
|
||||
}
|
||||
|
||||
//[PermissionOperate(name: SecurityPermissionPolicy.SecurityHelpFunction, operate: Operate.Print)]
|
||||
@@ -56,14 +155,14 @@ namespace CloudBuilder.Security.Service
|
||||
|
||||
[PermissionOperate(name: SecurityPermissionPolicy.SecurityHelpFunction, operate: Operate.Insert)]
|
||||
[UnitOfWork]
|
||||
public SecurityHelpFunctionEntity Insert(SecurityHelpFunctionEntity data)
|
||||
public SecurityHelpFunctionData Insert(SecurityHelpFunctionData data)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
[PermissionOperate(name: SecurityPermissionPolicy.SecurityHelpFunction, operate: Operate.Update)]
|
||||
[UnitOfWork]
|
||||
public SecurityHelpFunctionEntity Update(SecurityHelpFunctionEntity data)
|
||||
public SecurityHelpFunctionData Update(SecurityHelpFunctionData data)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
@@ -74,7 +173,293 @@ namespace CloudBuilder.Security.Service
|
||||
public void Delete(string key)
|
||||
{
|
||||
var ent = repository.DetachedEntities.Where(x => x.HelpFunctionId == key).FirstOrDefault()!;
|
||||
if (ent != null) { repository.DeleteNow(ent); }
|
||||
if (ent == null) { throw new ValidatedException("记录不存在."); }
|
||||
|
||||
repository.DeleteNow(ent);
|
||||
|
||||
// 一并清掉关联明细,避免留下孤儿记录
|
||||
DeleteSteps(ent.HelpFunctionId);
|
||||
DeleteFunctionFeatures(ent.FunctionName);
|
||||
}
|
||||
|
||||
//==================== 帮助文档维护:主表 + 步骤 + 引用的组 ====================
|
||||
|
||||
[PermissionOperate(name: SecurityPermissionPolicy.SecurityHelpFunction, operate: Operate.Find)]
|
||||
public SecurityHelpFunctionData FindByFunctionName(string functionName)
|
||||
{
|
||||
SecurityHelpFunctionData data = new SecurityHelpFunctionData();
|
||||
if (string.IsNullOrEmpty(functionName)) return data;
|
||||
|
||||
SecurityHelpFunctionEntity function = repository.DetachedEntities.Where(x => x.FunctionName == functionName).FirstOrDefault();
|
||||
if (function == null) return data;
|
||||
|
||||
data.SecurityHelpFunction = function;
|
||||
|
||||
data.SecurityHelpSteps = repository.GetRepository<IRepository<SecurityHelpStepEntity>>()
|
||||
.DetachedEntities.Where(x => x.HelpFunctionId == function.HelpFunctionId)
|
||||
.OrderBy(x => x.StepNo).ToArray();
|
||||
|
||||
data.SecurityHelpFunctionFeatures = repository.GetRepository<IRepository<SecurityHelpFunctionFeatureEntity>>()
|
||||
.DetachedEntities.Where(x => x.FunctionName == functionName)
|
||||
.OrderBy(x => x.SortNo).ToArray();
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
[PermissionOperate(name: SecurityPermissionPolicy.SecurityHelpFunction, operate: Operate.Update)]
|
||||
[UnitOfWork]
|
||||
public SecurityHelpFunctionData SaveFunction(SecurityHelpFunctionData data)
|
||||
{
|
||||
if (data == null || data.SecurityHelpFunction == null) throw new ValidatedException("没有要保存的内容.");
|
||||
|
||||
SecurityHelpFunctionEntity function = data.SecurityHelpFunction;
|
||||
|
||||
ValidateHelper.Validate(service, function, SecurityHelpFunctionEntity.DB_NAME_SECURITY_HELP_FUNCTION);
|
||||
|
||||
SecurityHelpFunctionEntity exist = repository.DetachedEntities.Where(x => x.FunctionName == function.FunctionName).FirstOrDefault();
|
||||
|
||||
if (exist == null)
|
||||
{
|
||||
if (string.IsNullOrEmpty(function.HelpFunctionId))
|
||||
{
|
||||
function.HelpFunctionId = NewId(SecurityPrefixPolicy.SECURITY_HELP_FUNCTION_ID);
|
||||
}
|
||||
repository.InsertNow(function);
|
||||
}
|
||||
else
|
||||
{
|
||||
ObjectCopyHelper.Copy(function, exist);
|
||||
repository.UpdateNow(exist);
|
||||
function = exist;
|
||||
}
|
||||
|
||||
SaveSteps(function.HelpFunctionId, data.SecurityHelpSteps);
|
||||
SaveFunctionFeatures(function.FunctionName, data.SecurityHelpFunctionFeatures);
|
||||
|
||||
return FindByFunctionName(function.FunctionName);
|
||||
}
|
||||
|
||||
[PermissionOperate(name: SecurityPermissionPolicy.SecurityHelpFunction, operate: Operate.Delete)]
|
||||
[UnitOfWork]
|
||||
public void DeleteByFunctionName(string functionName)
|
||||
{
|
||||
SecurityHelpFunctionEntity function = repository.DetachedEntities.Where(x => x.FunctionName == functionName).FirstOrDefault();
|
||||
if (function == null) throw new ValidatedException("记录不存在.");
|
||||
|
||||
repository.DeleteNow(function);
|
||||
|
||||
DeleteSteps(function.HelpFunctionId);
|
||||
DeleteFunctionFeatures(function.FunctionName);
|
||||
}
|
||||
|
||||
//==================== 功能点组维护:组 + 组内功能点 ====================
|
||||
|
||||
[PermissionOperate(name: SecurityPermissionPolicy.SecurityHelpFunction, operate: Operate.Find)]
|
||||
public SecurityHelpFeatureData FindByGroupCode(string groupCode)
|
||||
{
|
||||
SecurityHelpFeatureData data = new SecurityHelpFeatureData();
|
||||
if (string.IsNullOrEmpty(groupCode)) return data;
|
||||
|
||||
IRepository<SecurityHelpFeatureGroupEntity> repositoryGroup = repository.GetRepository<IRepository<SecurityHelpFeatureGroupEntity>>();
|
||||
|
||||
SecurityHelpFeatureGroupEntity group = repositoryGroup.DetachedEntities.Where(x => x.GroupCode == groupCode).FirstOrDefault();
|
||||
if (group == null) return data;
|
||||
|
||||
data.SecurityHelpFeatureGroup = group;
|
||||
|
||||
data.SecurityHelpFeatures = repository.GetRepository<IRepository<SecurityHelpFeatureEntity>>()
|
||||
.DetachedEntities.Where(x => x.HelpFeatureGroupId == group.HelpFeatureGroupId)
|
||||
.OrderBy(x => x.SortNo).ToArray();
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
[PermissionOperate(name: SecurityPermissionPolicy.SecurityHelpFunction, operate: Operate.Update)]
|
||||
[UnitOfWork]
|
||||
public SecurityHelpFeatureData SaveFeatureGroup(SecurityHelpFeatureData data)
|
||||
{
|
||||
if (data == null || data.SecurityHelpFeatureGroup == null) throw new ValidatedException("没有要保存的内容.");
|
||||
|
||||
IRepository<SecurityHelpFeatureGroupEntity> repositoryGroup = repository.GetRepository<IRepository<SecurityHelpFeatureGroupEntity>>();
|
||||
|
||||
SecurityHelpFeatureGroupEntity group = data.SecurityHelpFeatureGroup;
|
||||
|
||||
SecurityHelpFeatureGroupEntity exist = repositoryGroup.DetachedEntities.Where(x => x.GroupCode == group.GroupCode).FirstOrDefault();
|
||||
|
||||
if (exist == null)
|
||||
{
|
||||
if (string.IsNullOrEmpty(group.HelpFeatureGroupId))
|
||||
{
|
||||
group.HelpFeatureGroupId = NewId(SecurityPrefixPolicy.SECURITY_HELP_FEATURE_GROUP_ID);
|
||||
}
|
||||
repositoryGroup.InsertNow(group);
|
||||
}
|
||||
else
|
||||
{
|
||||
ObjectCopyHelper.Copy(group, exist);
|
||||
repositoryGroup.UpdateNow(exist);
|
||||
group = exist;
|
||||
}
|
||||
|
||||
SaveFeatures(group.HelpFeatureGroupId, data.SecurityHelpFeatures);
|
||||
|
||||
return FindByGroupCode(group.GroupCode);
|
||||
}
|
||||
|
||||
[PermissionOperate(name: SecurityPermissionPolicy.SecurityHelpFunction, operate: Operate.Delete)]
|
||||
[UnitOfWork]
|
||||
public void DeleteByGroupCode(string groupCode)
|
||||
{
|
||||
IRepository<SecurityHelpFeatureGroupEntity> repositoryGroup = repository.GetRepository<IRepository<SecurityHelpFeatureGroupEntity>>();
|
||||
|
||||
SecurityHelpFeatureGroupEntity group = repositoryGroup.DetachedEntities.Where(x => x.GroupCode == groupCode).FirstOrDefault();
|
||||
if (group == null) throw new ValidatedException("记录不存在.");
|
||||
|
||||
repositoryGroup.DeleteNow(group);
|
||||
|
||||
DeleteFeatures(group.HelpFeatureGroupId);
|
||||
}
|
||||
|
||||
//==================== 下拉选项 ====================
|
||||
|
||||
[AllowAnonymous]
|
||||
public SecurityFunctionDisplayData[] FindFunctionNameOptions()
|
||||
{
|
||||
return service.ServiceProvider.GetService<ISecurityFunctionService>()!.FindMenus();
|
||||
}
|
||||
|
||||
//==================== 私有辅助 ====================
|
||||
|
||||
/// <summary>
|
||||
/// 生成主键,走统一的流水号服务
|
||||
/// </summary>
|
||||
private string NewId(string subsystemId)
|
||||
{
|
||||
ISecurityGeneratorNumberService generatorNumberService = service.ServiceProvider.GetService<ISecurityGeneratorNumberService>()!;
|
||||
|
||||
return generatorNumberService.GetNo(
|
||||
SecurityPrefixPolicy.SECURITY_HELP,
|
||||
subsystemId,
|
||||
null,
|
||||
YesNoPolicy.NO,
|
||||
SecurityPrefixPolicy.SECURITY_HELP_FORMAT);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 步骤整存:先清旧再插新,StepNo 按传入顺序重排
|
||||
/// </summary>
|
||||
private void SaveSteps(string helpFunctionId, SecurityHelpStepEntity[]? steps)
|
||||
{
|
||||
IRepository<SecurityHelpStepEntity> repositoryStep = repository.GetRepository<IRepository<SecurityHelpStepEntity>>();
|
||||
|
||||
SecurityHelpStepEntity[] olds = repositoryStep.Entities.Where(x => x.HelpFunctionId == helpFunctionId).ToArray();
|
||||
if (olds != null && olds.Length > 0)
|
||||
{
|
||||
foreach (SecurityHelpStepEntity old in olds) repositoryStep.DeleteNow(old);
|
||||
}
|
||||
|
||||
if (steps == null || steps.Length == 0) return;
|
||||
|
||||
int i = 1;
|
||||
foreach (SecurityHelpStepEntity step in steps.OrderBy(x => x.StepNo).ToArray())
|
||||
{
|
||||
if (string.IsNullOrEmpty(step.HelpStepId))
|
||||
{
|
||||
step.HelpStepId = NewId(SecurityPrefixPolicy.SECURITY_HELP_STEP_ID);
|
||||
}
|
||||
step.HelpFunctionId = helpFunctionId;
|
||||
step.StepNo = i++;
|
||||
|
||||
repositoryStep.InsertNow(step);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 组合关系整存:先清旧再插新,SortNo 按传入顺序重排
|
||||
/// </summary>
|
||||
private void SaveFunctionFeatures(string functionName, SecurityHelpFunctionFeatureEntity[]? functionFeatures)
|
||||
{
|
||||
IRepository<SecurityHelpFunctionFeatureEntity> repositoryFunctionFeature = repository.GetRepository<IRepository<SecurityHelpFunctionFeatureEntity>>();
|
||||
|
||||
SecurityHelpFunctionFeatureEntity[] olds = repositoryFunctionFeature.Entities.Where(x => x.FunctionName == functionName).ToArray();
|
||||
if (olds != null && olds.Length > 0)
|
||||
{
|
||||
foreach (SecurityHelpFunctionFeatureEntity old in olds) repositoryFunctionFeature.DeleteNow(old);
|
||||
}
|
||||
|
||||
if (functionFeatures == null || functionFeatures.Length == 0) return;
|
||||
|
||||
int i = 1;
|
||||
foreach (SecurityHelpFunctionFeatureEntity functionFeature in functionFeatures.OrderBy(x => x.SortNo).ToArray())
|
||||
{
|
||||
if (string.IsNullOrEmpty(functionFeature.HelpFunctionFeatureId))
|
||||
{
|
||||
functionFeature.HelpFunctionFeatureId = NewId(SecurityPrefixPolicy.SECURITY_HELP_FUNCTION_FEATURE_ID);
|
||||
}
|
||||
functionFeature.FunctionName = functionName;
|
||||
functionFeature.SortNo = i++;
|
||||
|
||||
repositoryFunctionFeature.InsertNow(functionFeature);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 组内功能点整存:先清旧再插新,SortNo 按传入顺序重排
|
||||
/// </summary>
|
||||
private void SaveFeatures(string helpFeatureGroupId, SecurityHelpFeatureEntity[]? features)
|
||||
{
|
||||
IRepository<SecurityHelpFeatureEntity> repositoryFeature = repository.GetRepository<IRepository<SecurityHelpFeatureEntity>>();
|
||||
|
||||
SecurityHelpFeatureEntity[] olds = repositoryFeature.Entities.Where(x => x.HelpFeatureGroupId == helpFeatureGroupId).ToArray();
|
||||
if (olds != null && olds.Length > 0)
|
||||
{
|
||||
foreach (SecurityHelpFeatureEntity old in olds) repositoryFeature.DeleteNow(old);
|
||||
}
|
||||
|
||||
if (features == null || features.Length == 0) return;
|
||||
|
||||
int i = 1;
|
||||
foreach (SecurityHelpFeatureEntity feature in features.OrderBy(x => x.SortNo).ToArray())
|
||||
{
|
||||
if (string.IsNullOrEmpty(feature.HelpFeatureId))
|
||||
{
|
||||
feature.HelpFeatureId = NewId(SecurityPrefixPolicy.SECURITY_HELP_FEATURE_ID);
|
||||
}
|
||||
feature.HelpFeatureGroupId = helpFeatureGroupId;
|
||||
feature.SortNo = i++;
|
||||
|
||||
repositoryFeature.InsertNow(feature);
|
||||
}
|
||||
}
|
||||
|
||||
private void DeleteSteps(string helpFunctionId)
|
||||
{
|
||||
IRepository<SecurityHelpStepEntity> repositoryStep = repository.GetRepository<IRepository<SecurityHelpStepEntity>>();
|
||||
|
||||
SecurityHelpStepEntity[] olds = repositoryStep.Entities.Where(x => x.HelpFunctionId == helpFunctionId).ToArray();
|
||||
if (olds == null || olds.Length == 0) return;
|
||||
|
||||
foreach (SecurityHelpStepEntity old in olds) repositoryStep.DeleteNow(old);
|
||||
}
|
||||
|
||||
private void DeleteFunctionFeatures(string functionName)
|
||||
{
|
||||
IRepository<SecurityHelpFunctionFeatureEntity> repositoryFunctionFeature = repository.GetRepository<IRepository<SecurityHelpFunctionFeatureEntity>>();
|
||||
|
||||
SecurityHelpFunctionFeatureEntity[] olds = repositoryFunctionFeature.Entities.Where(x => x.FunctionName == functionName).ToArray();
|
||||
if (olds == null || olds.Length == 0) return;
|
||||
|
||||
foreach (SecurityHelpFunctionFeatureEntity old in olds) repositoryFunctionFeature.DeleteNow(old);
|
||||
}
|
||||
|
||||
private void DeleteFeatures(string helpFeatureGroupId)
|
||||
{
|
||||
IRepository<SecurityHelpFeatureEntity> repositoryFeature = repository.GetRepository<IRepository<SecurityHelpFeatureEntity>>();
|
||||
|
||||
SecurityHelpFeatureEntity[] olds = repositoryFeature.Entities.Where(x => x.HelpFeatureGroupId == helpFeatureGroupId).ToArray();
|
||||
if (olds == null || olds.Length == 0) return;
|
||||
|
||||
foreach (SecurityHelpFeatureEntity old in olds) repositoryFeature.DeleteNow(old);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user