1
1
package life .qbic .datamanager .views .navigation ;
2
2
3
+ import static java .util .Objects .requireNonNull ;
3
4
import static org .slf4j .LoggerFactory .getLogger ;
4
5
5
6
import com .vaadin .flow .component .Component ;
27
28
import java .util .Objects ;
28
29
import java .util .Optional ;
29
30
import life .qbic .application .commons .ApplicationException ;
31
+ import life .qbic .datamanager .security .UserPermissions ;
30
32
import life .qbic .datamanager .views .AppRoutes .Projects ;
31
33
import life .qbic .datamanager .views .Context ;
32
34
import life .qbic .datamanager .views .projects .overview .ProjectOverviewMain ;
@@ -63,14 +65,17 @@ public class ProjectSideNavigationComponent extends Div implements
63
65
private final Div content ;
64
66
private final transient ProjectInformationService projectInformationService ;
65
67
private final transient ExperimentInformationService experimentInformationService ;
68
+ private final transient UserPermissions userPermissions ;
66
69
private Context context = new Context ();
67
70
68
71
public ProjectSideNavigationComponent (
69
72
@ Autowired ProjectInformationService projectInformationService ,
70
- @ Autowired ExperimentInformationService experimentInformationService ) {
73
+ @ Autowired ExperimentInformationService experimentInformationService ,
74
+ @ Autowired UserPermissions userPermissions ) {
71
75
content = new Div ();
72
76
Objects .requireNonNull (projectInformationService );
73
77
Objects .requireNonNull (experimentInformationService );
78
+ this .userPermissions = requireNonNull (userPermissions , "userPermissions must not be null" );
74
79
addClassName ("project-navigation-drawer" );
75
80
this .projectInformationService = projectInformationService ;
76
81
this .experimentInformationService = experimentInformationService ;
@@ -95,8 +100,10 @@ public void beforeEnter(BeforeEnterEvent beforeEnterEvent) {
95
100
var project = loadProject (parsedProjectId );
96
101
List <Experiment > experiments = loadExperimentsForProject (project );
97
102
List <ProjectPreview > lastModifiedProjects = retrieveLastModifiedProjects ();
98
- content .add (generateNavigationSections (project , lastModifiedProjects , experiments ).toArray (
99
- Component []::new ));
103
+ boolean canUserAdministrate = userPermissions .changeProjectAccess (parsedProjectId );
104
+ content .add (
105
+ generateNavigationSections (project , lastModifiedProjects , experiments , canUserAdministrate )
106
+ .toArray (Component []::new ));
100
107
}
101
108
102
109
private Project loadProject (ProjectId id ) {
@@ -116,19 +123,19 @@ private List<ProjectPreview> retrieveLastModifiedProjects() {
116
123
}
117
124
118
125
private static List <Div > generateNavigationSections (Project project ,
119
- List <ProjectPreview > lastModifiedProjects , List <Experiment > experiments ) {
120
- Div projectSection = createProjectSection (project , lastModifiedProjects );
126
+ List <ProjectPreview > lastModifiedProjects , List <Experiment > experiments , boolean canUserAdministrate ) {
127
+ Div projectSection = createProjectSection (project , lastModifiedProjects , canUserAdministrate );
121
128
Div experimentSection = createExperimentSection (project .getId ().value (), experiments );
122
129
return List .of (projectSection , experimentSection );
123
130
}
124
131
125
132
private static Div createProjectSection (Project project ,
126
- List <ProjectPreview > lastModifiedProjects ) {
133
+ List <ProjectPreview > lastModifiedProjects , boolean canUserAdministrate ) {
127
134
Div projectSection = new Div ();
128
135
projectSection .add (createProjectHeader (),
129
136
createProjectSelection (project .getProjectIntent ().projectTitle ().title (),
130
137
lastModifiedProjects ),
131
- generateSectionDivider (), createProjectItems (project .getId ().value ()));
138
+ generateSectionDivider (), createProjectItems (project .getId ().value (), canUserAdministrate ));
132
139
projectSection .addClassName ("project-section" );
133
140
return projectSection ;
134
141
}
@@ -187,9 +194,12 @@ private static Span generateSectionDivider() {
187
194
return sectionDivider ;
188
195
}
189
196
190
- private static Div createProjectItems (String projectId ) {
197
+ private static Div createProjectItems (String projectId , boolean canUserAdministrate ) {
191
198
Div projectItems = new Div ();
192
- projectItems .add (createProjectSummaryLink (projectId ), createProjectUsers (projectId ));
199
+ projectItems .add (createProjectSummaryLink (projectId ));
200
+ if (canUserAdministrate ) {
201
+ projectItems .add (createProjectUsers (projectId ));
202
+ }
193
203
projectItems .addClassName ("project-items" );
194
204
return projectItems ;
195
205
}
0 commit comments