权限相关调整
This commit is contained in:
+42
-3
@@ -6,10 +6,14 @@ namespace SimpleAdmin.Application;
|
||||
public class OnboardingContractTemplateService : DbRepository<ObContractTemplate>, IOnboardingContractTemplateService
|
||||
{
|
||||
private readonly IFileService _fileService;
|
||||
private readonly IOnboardingDataPermissionService _dataPermission;
|
||||
|
||||
public OnboardingContractTemplateService(IFileService fileService)
|
||||
public OnboardingContractTemplateService(
|
||||
IFileService fileService,
|
||||
IOnboardingDataPermissionService dataPermission)
|
||||
{
|
||||
_fileService = fileService;
|
||||
_dataPermission = dataPermission;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -122,7 +126,11 @@ public class OnboardingContractTemplateService : DbRepository<ObContractTemplate
|
||||
/// </summary>
|
||||
public async Task Edit(OnboardingContractTemplateEditInput input)
|
||||
{
|
||||
await Detail(new BaseIdInput { Id = input.Id });
|
||||
var template = await Detail(new BaseIdInput { Id = input.Id });
|
||||
await _dataPermission.EnsureCanManage(
|
||||
template.CreateUserId,
|
||||
OnboardingPermissionCodes.ContractManageAll,
|
||||
"合同模板");
|
||||
NormalizeInput(input);
|
||||
await ValidateBusinessScope(input.CompanyId, input.DepartmentId, input.PositionIds);
|
||||
await ValidateReferencedOnboardingTemplates(input);
|
||||
@@ -156,6 +164,16 @@ public class OnboardingContractTemplateService : DbRepository<ObContractTemplate
|
||||
if (input.Ids.Count == 0)
|
||||
return;
|
||||
|
||||
var templates = await Context.Queryable<ObContractTemplate>()
|
||||
.Where(item => input.Ids.Contains(item.Id))
|
||||
.ToListAsync();
|
||||
if (templates.Count != input.Ids.Distinct().Count())
|
||||
throw Oops.Bah("合同模板不存在");
|
||||
await _dataPermission.EnsureCanManage(
|
||||
templates.Select(item => item.CreateUserId),
|
||||
OnboardingPermissionCodes.ContractManageAll,
|
||||
"合同模板");
|
||||
|
||||
var hasOnboardingTemplates = await Context.Queryable<ObOnboardingTemplateContract>()
|
||||
.AnyAsync(it => input.Ids.Contains(it.ContractTemplateId));
|
||||
if (hasOnboardingTemplates)
|
||||
@@ -209,6 +227,7 @@ public class OnboardingContractTemplateService : DbRepository<ObContractTemplate
|
||||
{
|
||||
var version = await Context.Queryable<ObContractTemplateVersion>().InSingleAsync(input.Id)
|
||||
?? throw Oops.Bah("合同版本不存在");
|
||||
await EnsureTemplateCanManage(version.TemplateId);
|
||||
|
||||
var isUsedInOnboardingTemplate = await Context.Queryable<ObOnboardingTemplateContract>()
|
||||
.AnyAsync(it => it.ContractTemplateVersionId == version.Id);
|
||||
@@ -258,7 +277,11 @@ public class OnboardingContractTemplateService : DbRepository<ObContractTemplate
|
||||
/// </summary>
|
||||
public async Task AddVersion(OnboardingContractVersionAddInput input)
|
||||
{
|
||||
await Detail(new BaseIdInput { Id = input.TemplateId });
|
||||
var template = await Detail(new BaseIdInput { Id = input.TemplateId });
|
||||
await _dataPermission.EnsureCanManage(
|
||||
template.CreateUserId,
|
||||
OnboardingPermissionCodes.ContractManageAll,
|
||||
"合同模板");
|
||||
var file = await Context.Queryable<SysFile>().InSingleAsync(input.SourceDocxFileId)
|
||||
?? throw Oops.Bah("DOCX 源文件不存在");
|
||||
if (!string.Equals(file.Suffix, "docx", StringComparison.OrdinalIgnoreCase))
|
||||
@@ -337,6 +360,7 @@ public class OnboardingContractTemplateService : DbRepository<ObContractTemplate
|
||||
|
||||
var version = await Context.Queryable<ObContractTemplateVersion>().InSingleAsync(input.Id)
|
||||
?? throw Oops.Bah("模板版本不存在");
|
||||
await EnsureTemplateCanManage(version.TemplateId);
|
||||
|
||||
if (input.VersionStatus == ContractTemplateVersionStatus.Enabled)
|
||||
{
|
||||
@@ -374,6 +398,11 @@ public class OnboardingContractTemplateService : DbRepository<ObContractTemplate
|
||||
if (!string.Equals(variable.VariableCode, input.VariableCode, StringComparison.Ordinal))
|
||||
throw Oops.Bah("DOCX 占位符编码由系统识别,不能修改");
|
||||
|
||||
var version = await Context.Queryable<ObContractTemplateVersion>()
|
||||
.InSingleAsync(variable.TemplateVersionId)
|
||||
?? throw Oops.Bah("模板版本不存在");
|
||||
await EnsureTemplateCanManage(version.TemplateId);
|
||||
|
||||
var isUsedInTask = await Context.Queryable<ObTaskContract>()
|
||||
.AnyAsync(it => it.TemplateVersionId == input.TemplateVersionId);
|
||||
if (isUsedInTask)
|
||||
@@ -384,6 +413,16 @@ public class OnboardingContractTemplateService : DbRepository<ObContractTemplate
|
||||
await Context.Updateable(entity).ExecuteCommandAsync();
|
||||
}
|
||||
|
||||
private async Task EnsureTemplateCanManage(long templateId)
|
||||
{
|
||||
var template = await Context.Queryable<ObContractTemplate>().InSingleAsync(templateId)
|
||||
?? throw Oops.Bah("合同模板不存在");
|
||||
await _dataPermission.EnsureCanManage(
|
||||
template.CreateUserId,
|
||||
OnboardingPermissionCodes.ContractManageAll,
|
||||
"合同模板");
|
||||
}
|
||||
|
||||
private static ObTemplateVariable BuildDetectedVariable(long versionId, string code, ObVariableDefinition def, int index)
|
||||
{
|
||||
var separatorIndex = code.IndexOf('.');
|
||||
|
||||
Reference in New Issue
Block a user