Skip to content

Commit edb752d

Browse files
Ticket #23 : business analyst can create and edit his case definitions
1 parent 6ec35a3 commit edb752d

205 files changed

Lines changed: 2378 additions & 2391 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/CaseManagement.CMMN.AspNetCore/Apis/CaseDefinitionsController.cs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -81,14 +81,7 @@ private static JObject ToDto(FindResponse<CaseDefinition> resp)
8181
{ "start_index", resp.StartIndex },
8282
{ "total_length", resp.TotalLength },
8383
{ "count", resp.Count },
84-
{ "content", new JArray(resp.Content.Select(r => new JObject
85-
{
86-
{ "id", r.Id },
87-
{ "name", r.Name },
88-
{ "description", r.Description },
89-
{ "case_file", r.CaseFileId },
90-
{ "create_datetime", r.CreateDateTime }
91-
})) }
84+
{ "content", new JArray(resp.Content.Select(r => ToDto(r))) }
9285
};
9386
}
9487

@@ -124,6 +117,7 @@ private static FindWorkflowDefinitionsParameter ExtractFindParameter(IEnumerable
124117
{
125118
string caseFile;
126119
string text;
120+
string caseOwner;
127121
var parameter = new FindWorkflowDefinitionsParameter();
128122
parameter.ExtractFindParameter(query);
129123
if (query.TryGet("case_file", out caseFile))
@@ -136,6 +130,11 @@ private static FindWorkflowDefinitionsParameter ExtractFindParameter(IEnumerable
136130
parameter.Text = text;
137131
}
138132

133+
if (query.TryGet("owner", out caseOwner))
134+
{
135+
parameter.CaseOwner = caseOwner;
136+
}
137+
139138
return parameter;
140139
}
141140
}

src/CaseManagement.CMMN.AspNetCore/Apis/CaseFilesController.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ public async Task<IActionResult> Upload([FromBody] UploadCaseFilesCommand parame
9696
}
9797

9898
[HttpPut("{id}")]
99+
[Authorize("update_casefile")]
99100
public async Task<IActionResult> Update(string id, [FromBody] UpdateCaseFileCommand parameter)
100101
{
101102
try

src/CaseManagement.CMMN.AspNetCore/Apis/CaseInstancesController.cs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,17 +81,26 @@ public async Task<IActionResult> GetCaseFileItems(string id)
8181
}
8282

8383
[HttpPost]
84+
[Authorize("add_case_instance")]
8485
public async Task<IActionResult> Create([FromBody] CreateCaseInstanceCommand createCaseInstance)
8586
{
8687
try
8788
{
89+
createCaseInstance.NameIdentifier = this.GetNameIdentifier();
8890
var result = await _createCaseInstanceCommandHandler.Handle(createCaseInstance);
8991
return new ContentResult
9092
{
9193
StatusCode = (int)HttpStatusCode.Created,
9294
Content = ToDto(result).ToString()
9395
};
9496
}
97+
catch(UnauthorizedCaseWorkerException)
98+
{
99+
return this.ToError(new Dictionary<string, string>
100+
{
101+
{ "unauthorized_request", "you're not authorized to create the case instance" }
102+
}, HttpStatusCode.Unauthorized, Request);
103+
}
95104
catch (UnknownCaseDefinitionException)
96105
{
97106
return this.ToError(new Dictionary<string, string>
@@ -102,13 +111,21 @@ public async Task<IActionResult> Create([FromBody] CreateCaseInstanceCommand cre
102111
}
103112

104113
[HttpGet("{id}/launch")]
114+
[Authorize("launch_case_intance")]
105115
public async Task<IActionResult> Launch(string id)
106116
{
107117
try
108118
{
109-
await _launchCaseInstanceCommandHandler.Handle(new LaunchCaseInstanceCommand { CaseInstanceId = id });
119+
await _launchCaseInstanceCommandHandler.Handle(new LaunchCaseInstanceCommand { CaseInstanceId = id, NameIdentifier = this.GetNameIdentifier() });
110120
return new OkResult();
111121
}
122+
catch (UnauthorizedCaseWorkerException)
123+
{
124+
return this.ToError(new Dictionary<string, string>
125+
{
126+
{ "unauthorized_request", "you're not authorized to launch the case instance" }
127+
}, HttpStatusCode.Unauthorized, Request);
128+
}
112129
catch (UnknownCaseInstanceException)
113130
{
114131
return this.ToError(new Dictionary<string, string>

src/CaseManagement.CMMN.Host/Startup.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ public void ConfigureServices(IServiceCollection services)
6262
policy.AddPolicy("get_performance", p => p.RequireRole("admin"));
6363
policy.AddPolicy("get_casedefinition", p => p.RequireRole("businessanalyst"));
6464
policy.AddPolicy("add_casefile", p => p.RequireRole("businessanalyst"));
65+
policy.AddPolicy("update_casefile", p => p.RequireRole("businessanalyst"));
66+
policy.AddPolicy("add_case_instance", p => p.RequireRole("businessanalyst"));
67+
policy.AddPolicy("launch_case_intance", p => p.RequireRole("businessanalyst"));
6568
});
6669
services.AddCors(options => options.AddPolicy("AllowAll", p => p.AllowAnyOrigin()
6770
.AllowAnyMethod()

src/CaseManagement.CMMN/CaseInstance/CommandHandlers/CreateCaseInstanceCommandHandler.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,14 @@ public CreateCaseInstanceCommandHandler(ICaseDefinitionQueryRepository cmmnWorkf
2424
{
2525
throw new UnknownCaseDefinitionException();
2626
}
27+
28+
if (workflowDefinition.CaseOwner != command.NameIdentifier)
29+
{
30+
throw new UnauthorizedCaseWorkerException(command.NameIdentifier, null, null);
31+
}
2732

2833
var workflowInstance = Domains.CaseInstance.New(workflowDefinition);
34+
workflowInstance.CaseOwner = command.NameIdentifier;
2935
await _commitAggregateHelper.Commit(workflowInstance, workflowInstance.GetStreamName());
3036
return workflowInstance;
3137
}

src/CaseManagement.CMMN/CaseInstance/CommandHandlers/LaunchCaseInstanceCommandHandler.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ public async Task Handle(LaunchCaseInstanceCommand launchCaseInstanceCommand)
2525
{
2626
throw new UnknownCaseInstanceException(launchCaseInstanceCommand.CaseInstanceId);
2727
}
28+
29+
if (caseInstance.CaseOwner != launchCaseInstanceCommand.NameIdentifier)
30+
{
31+
throw new UnauthorizedCaseWorkerException(launchCaseInstanceCommand.NameIdentifier, caseInstance.Id, null);
32+
}
2833

2934
await _queueProvider.QueueLaunchProcess(caseInstance.Id);
3035
}

src/CaseManagement.CMMN/CaseInstance/Commands/CreateCaseInstanceCommand.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@ public class CreateCaseInstanceCommand
77
{
88
[DataMember(Name = "case_definition_id")]
99
public string CaseDefinitionId { get; set; }
10+
public string NameIdentifier { get; set; }
1011
}
1112
}

src/CaseManagement.CMMN/CaseInstance/Commands/LaunchCaseInstanceCommand.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@
33
public class LaunchCaseInstanceCommand
44
{
55
public string CaseInstanceId { get; set; }
6+
public string NameIdentifier { get; set; }
67
}
78
}

src/CaseManagement.CMMN/Domains/CaseInstance/CaseInstance.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public CaseInstance(string id, DateTime createDateTime, string workflowDefinitio
3737
}
3838

3939
public string CaseDefinitionId { get; set; }
40+
public string CaseOwner { get; set; }
4041
public DateTime CreateDateTime { get; set; }
4142
public string State { get; set; }
4243
public CaseInstanceExecutionContext ExecutionContext { get; set; }
@@ -1015,7 +1016,8 @@ public override object Clone()
10151016
Version = Version,
10161017
CaseDefinitionId = CaseDefinitionId,
10171018
WorkflowElementInstances = WorkflowElementInstances == null ? null : WorkflowElementInstances.Select(w => (CaseElementInstance)w.Clone()).ToList(),
1018-
ElementPlanificationLst = ElementPlanificationLst.Select(w => (CaseElementInstancePlanification)w.Clone()).ToList()
1019+
ElementPlanificationLst = ElementPlanificationLst.Select(w => (CaseElementInstancePlanification)w.Clone()).ToList(),
1020+
CaseOwner = CaseOwner
10191021
};
10201022
}
10211023

src/CaseManagement.Website/angularApp/app/casedefinitions/casedefinitions.module.js

Lines changed: 0 additions & 65 deletions
This file was deleted.

0 commit comments

Comments
 (0)