-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathconsultant.policy.ts
51 lines (48 loc) · 1.49 KB
/
consultant.policy.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import { ProjectWorkflow } from '../../../project/workflow/project-workflow';
import { member, Policy, Role } from '../util';
export const projectTransitions = () =>
ProjectWorkflow.pickNames(
'Consultant Endorses Proposal',
'Consultant Opposes Proposal',
);
// NOTE: There could be other permissions for this role from other policies
@Policy([Role.Consultant, Role.ConsultantManager], (r) => [
[
r.Ceremony,
r.Engagement,
r.EthnologueLanguage,
r.Language,
r.Organization,
r.Partner,
r.Partnership,
r.Product,
r.Project,
r.ProjectMember,
r.PeriodicReport,
r.ProgressReportCommunityStory,
r.ProgressReportHighlight,
r.ProgressReportTeamNews,
r.ProgressReportMedia,
r.ProgressReportVarianceExplanation,
r.StepProgress,
].map((it) => it.when(member).read),
r.InternshipEngagement.when(member).edit.specifically((p) => [
p.ceremony.none,
]),
r.LanguageEngagement.when(member).read.specifically((p) => [
p.many('pnp', 'paratextRegistryId').edit,
]),
r.FieldRegion.read,
r.FieldZone.read,
r.NarrativeReport.when(member).edit.create,
r.Organization.specifically((p) => p.address.none),
r.Partner.specifically((p) => p.pointOfContact.none),
r.Project.when(member).specifically((p) => p.rootDirectory.edit),
r.Unavailability.read,
r.User.read.create,
r.ProjectWorkflowEvent.read.whenAll(
member,
r.ProjectWorkflowEvent.isTransitions(projectTransitions),
).execute,
])
export class ConsultantPolicy {}