package org.molgenis.app; import org.molgenis.app.controller.HomeController; import org.molgenis.auth.*; import org.molgenis.bootstrap.populate.SystemEntityRegistry; import org.molgenis.data.DataService; import org.molgenis.data.Entity; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.Collection; import static java.util.Arrays.asList; import static java.util.Objects.requireNonNull; import static org.molgenis.auth.GroupMetaData.GROUP; import static org.molgenis.auth.GroupMetaData.NAME; import static org.molgenis.auth.UserMetaData.USER; import static org.molgenis.auth.UserMetaData.USERNAME; import static org.molgenis.security.account.AccountService.ALL_USER_GROUP; import static org.molgenis.security.core.utils.SecurityUtils.ANONYMOUS_USERNAME; import static org.molgenis.security.core.utils.SecurityUtils.AUTHORITY_PLUGIN_READ_PREFIX; /** * Registry of application system entities to be added to an empty database. */ @Component public class WebAppSystemEntityRegistry implements SystemEntityRegistry { private final DataService dataService; private final UserAuthorityFactory userAuthorityFactory; private final GroupAuthorityFactory groupAuthorityFactory; @Autowired public WebAppSystemEntityRegistry(DataService dataService, UserAuthorityFactory userAuthorityFactory, GroupAuthorityFactory groupAuthorityFactory) { this.dataService = requireNonNull(dataService); this.userAuthorityFactory = requireNonNull(userAuthorityFactory); this.groupAuthorityFactory = requireNonNull(groupAuthorityFactory); } @Override public Collection<Entity> getEntities() { User anonymousUser = dataService.query(USER, User.class).eq(USERNAME, ANONYMOUS_USERNAME).findOne(); // allow anonymous user to see the home plugin UserAuthority anonymousHomeAuthority = userAuthorityFactory.create(); anonymousHomeAuthority.setUser(anonymousUser); anonymousHomeAuthority.setRole(AUTHORITY_PLUGIN_READ_PREFIX + HomeController.ID); Group allUsersGroup = dataService.query(GROUP, Group.class).eq(NAME, ALL_USER_GROUP).findOne(); // allow users in the all users group to see the home plugin GroupAuthority usersGroupHomeAuthority = groupAuthorityFactory.create(); usersGroupHomeAuthority.setGroup(allUsersGroup); usersGroupHomeAuthority.setRole(AUTHORITY_PLUGIN_READ_PREFIX + HomeController.ID); return asList(anonymousHomeAuthority, usersGroupHomeAuthority); } }