diff --git a/IRaCIS.Core.API/Controllers/FinancialChangeController.cs b/IRaCIS.Core.API/Controllers/FinancialChangeController.cs index 5429f84e7..282891a36 100644 --- a/IRaCIS.Core.API/Controllers/FinancialChangeController.cs +++ b/IRaCIS.Core.API/Controllers/FinancialChangeController.cs @@ -52,7 +52,7 @@ namespace IRaCIS.Core.API.Controllers.Special [HttpPost, Route("trial/addOrUpdateTrial")] [Authorize(Policy = IRaCISPolicy.PM_APM)] - [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] + [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AddOrUpdateTrial", "BeforeOngoingCantOpt", "AfterStopCannNotOpt" })] public async Task> AddOrUpdateTrial(TrialCommand param) { var userId = Guid.Parse(User.FindFirst("id").Value); diff --git a/IRaCIS.Core.API/Controllers/InspectionController.cs b/IRaCIS.Core.API/Controllers/InspectionController.cs index a17f24a47..4ac6b6796 100644 --- a/IRaCIS.Core.API/Controllers/InspectionController.cs +++ b/IRaCIS.Core.API/Controllers/InspectionController.cs @@ -428,7 +428,7 @@ namespace IRaCIS.Core.API.Controllers /// /// [HttpPost, Route("Inspection/TrialDocument/userConfirm")] - [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] + [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "SignSystemDocNoTrialId", "AfterStopCannNotOpt" })] [UnitOfWork] public async Task UserConfirm(DataInspectionDto opt) { diff --git a/IRaCIS.Core.Application/BusinessFilter/TrialResourceFilter.cs b/IRaCIS.Core.Application/BusinessFilter/TrialResourceFilter.cs index 270357c92..9c21757e4 100644 --- a/IRaCIS.Core.Application/BusinessFilter/TrialResourceFilter.cs +++ b/IRaCIS.Core.Application/BusinessFilter/TrialResourceFilter.cs @@ -11,35 +11,46 @@ namespace IRaCIS.Core.Application.Filter /// /// 主要为了 处理项目结束 锁库,不允许操作 /// - public class TrialResourceFilter : Attribute, IAsyncResourceFilter + public class TrialResourceFilter : Attribute, IAsyncResourceFilter { private readonly IEasyCachingProvider _provider; private readonly IUserInfo _userInfo; - private readonly string _trialOpt; - //private readonly List _trialOptList; + private readonly List _trialOptList=new List(); - public TrialResourceFilter(IEasyCachingProvider provider, IUserInfo userInfo, string trialOpt) + public TrialResourceFilter(IEasyCachingProvider provider, IUserInfo userInfo, string trialOpt = null, string trialOpt2 = null, string trialOpt3 = null) { _provider = provider; _userInfo = userInfo; - _trialOpt = trialOpt; + //_trialOpt = trialOpt; + + if (!string.IsNullOrWhiteSpace(trialOpt)) _trialOptList.Add(trialOpt); + if (!string.IsNullOrWhiteSpace(trialOpt2)) _trialOptList.Add(trialOpt2); + if (!string.IsNullOrWhiteSpace(trialOpt3)) _trialOptList.Add(trialOpt3); + + } - //public TrialResourceFilter(IEasyCachingProvider provider, IUserInfo userInfo, List trialOptList=new list) + + //public TrialResourceFilter(IEasyCachingProvider provider, IUserInfo userInfo) //{ // _provider = provider; // _userInfo = userInfo; - // _trialOptList = trialOptList; //} + + + //优先选择异步的方法 public async Task OnResourceExecutionAsync(ResourceExecutingContext context, ResourceExecutionDelegate next) { + // var typeFilter = context.ActionDescriptor.EndpointMetadata.Where(t => t.GetType() == typeof(TypeFilterAttribute)).Select(t => (TypeFilterAttribute)t).ToList().FirstOrDefault(); + //var _trialOptList= typeFilter.Arguments.Select(t => t.ToString()).ToList(); + #region 处理新的用户类型,不能操作项目相关接口 // 后期列举出具体的类型,其他任何用户类型,都不允许操作 @@ -118,7 +129,7 @@ namespace IRaCIS.Core.Application.Filter } //使用字符串取 如果是swagger 可能有时取的不对 因为空格的原因 - //trialIdStr = contentFromBody.Substring(trialIdIndex + "TrialId".Length + 4, 36); + //trialIdStr = contentFromBody.Substring(trialIdIndex + "TrialId".Length + 4, 3 } #endregion @@ -145,7 +156,7 @@ namespace IRaCIS.Core.Application.Filter var trialStatusStr = cacheResultDic[trialIdStr]; // 这里是统一拦截 项目有关的操作允许情况(特殊的地方,比如项目配置(有的在多种状态(初始化,ongoing)都可以操作,有的仅仅在Initializing)还有 项目添加和更新,不走这里,特殊处理,不然在这里显得很乱,判断是哪个接口) - if (trialStatusStr.Value == StaticData.TrialState.TrialOngoing || _trialOpt == TrialOpt.BeforeOngoingCantOpt) + if (trialStatusStr.Value == StaticData.TrialState.TrialOngoing || _trialOptList.Any(t=>t== TrialOpt.BeforeOngoingCantOpt) ) { await next.Invoke(); @@ -159,7 +170,10 @@ namespace IRaCIS.Core.Application.Filter } } - + else if (_trialOptList.Any(t => t == TrialOpt.AddOrUpdateTrial ||t ==TrialOpt.SignSystemDocNoTrialId)) + { + await next.Invoke(); + } else { diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs index f96d955a0..8c2030080 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs @@ -876,7 +876,7 @@ namespace IRaCIS.Core.Application /// [HttpPut("{trialId:guid}/{isAbandon:bool}")] [Authorize(Policy = IRaCISPolicy.PM)] - [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] + [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt", "AfterStopCannNotOpt" })] public async Task AbandonTrial(Guid trialId, /*Guid? signId,*/ bool isAbandon) { @@ -911,7 +911,7 @@ namespace IRaCIS.Core.Application /// /// [HttpPut] - [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "BeforeOngoingCantOpt" })] + [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "BeforeOngoingCantOpt", "AfterStopCannNotOpt" })] //[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] public async Task ConfigTrialTaskInfo(TrialTaskConfig trialConfig) { @@ -929,7 +929,7 @@ namespace IRaCIS.Core.Application /// /// [HttpPut] - [TypeFilter(typeof(TrialResourceFilter),Arguments = new object[] { "BeforeOngoingCantOpt" })] + [TypeFilter(typeof(TrialResourceFilter),Arguments = new object[] { "BeforeOngoingCantOpt", "AfterStopCannNotOpt" })] //[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] public async Task ConfigTrialReadingTaskViewRule(TrialReadingTaskViewConfig trialConfig) { diff --git a/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs b/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs index b4f9884cc..e28817583 100644 --- a/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs +++ b/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs @@ -104,7 +104,7 @@ namespace IRaCIS.Application.Services [UnitOfWork] [HttpPost] [Authorize(Policy = IRaCISPolicy.PM_APM)] - [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "BeforeOngoingCantOpt" })] + [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "BeforeOngoingCantOpt", "AfterStopCannNotOpt" })] //[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] public async Task AddOrUpdateVisitStage(VisitPlanCommand visitPlan) { @@ -207,7 +207,7 @@ namespace IRaCIS.Application.Services [UnitOfWork] [HttpPost("{trialId:guid}")] [Authorize(Policy = IRaCISPolicy.PM_APM)] - [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "BeforeOngoingCantOpt" })] + [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "BeforeOngoingCantOpt", "AfterStopCannNotOpt" })] //[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] public async Task ConfirmTrialVisitPlan(Guid trialId) { diff --git a/IRaCIS.Core.Domain/_Config/_StaticData.cs b/IRaCIS.Core.Domain/_Config/_StaticData.cs index 4711d3180..faa55e367 100644 --- a/IRaCIS.Core.Domain/_Config/_StaticData.cs +++ b/IRaCIS.Core.Domain/_Config/_StaticData.cs @@ -58,6 +58,11 @@ public static class StaticData //ongoing 前能操作 但是Stop后 也不能操作 public static readonly string BeforeOngoingCantOpt = "BeforeOngoingCantOpt"; + + public static readonly string AddOrUpdateTrial = "AddOrUpdateTrial"; + + public static readonly string SignSystemDocNoTrialId = "SignSystemDocNoTrialId"; + }