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 package info.magnolia.templating.elements.attribute;
35
36 import info.magnolia.context.Context;
37 import info.magnolia.rendering.template.TemplateDefinition;
38 import info.magnolia.templating.elements.ComponentElement;
39
40 import java.util.Optional;
41
42 import javax.inject.Provider;
43
44
45
46
47
48
49
50 public abstract class Permission implements ElementAttribute<ComponentElement> {
51
52 @Override
53 public Optional<String> getValue(ComponentElement element) {
54 return Optional.ofNullable(resolvePermission(element))
55 .map(Object::toString);
56 }
57
58 private Boolean resolvePermission(ComponentElement componentElement) {
59 TemplateDefinition templateDefinition = componentElement.getTemplateDefinition();
60 Boolean permission = templateDefinition != null && getPermission(templateDefinition) != null ? getPermission(templateDefinition) : null;
61 if (permission != null || componentElement.getPermissions() == null) {
62 return permission;
63 }
64 return hasPermission(componentElement);
65 }
66
67 abstract Boolean getPermission(TemplateDefinition templateDefinition);
68
69 abstract Boolean hasPermission(ComponentElement element);
70
71
72
73
74 public static class Movable extends Permission {
75
76 private final Provider<Context> contextProvider;
77
78 public Movable(Provider<Context> contextProvider) {
79 this.contextProvider = contextProvider;
80 }
81
82 Boolean getPermission(TemplateDefinition templateDefinition) {
83 return templateDefinition.getMoveable();
84 }
85
86 @Override
87 Boolean hasPermission(ComponentElement element) {
88 return element.getPermissions().canMove(contextProvider.get().getUser());
89 }
90 }
91
92
93
94
95 public static class Deletable extends Permission {
96
97 private final Provider<Context> contextProvider;
98
99 public Deletable(Provider<Context> contextProvider) {
100 this.contextProvider = contextProvider;
101 }
102
103 Boolean getPermission(TemplateDefinition templateDefinition) {
104 return templateDefinition.getDeletable();
105 }
106
107 @Override
108 Boolean hasPermission(ComponentElement element) {
109 return element.getPermissions().canDelete(contextProvider.get().getUser());
110 }
111 }
112
113
114
115
116 public static class Writable extends Permission {
117
118 private final Provider<Context> contextProvider;
119
120 public Writable(Provider<Context> contextProvider) {
121 this.contextProvider = contextProvider;
122 }
123
124 Boolean getPermission(TemplateDefinition templateDefinition) {
125 return templateDefinition.getWritable();
126 }
127
128 @Override
129 Boolean hasPermission(ComponentElement element) {
130 return element.getPermissions().canWrite(contextProvider.get().getUser());
131 }
132 }
133 }