r833 - in trunk/src/main/java/org/ourproject/kune: platf/client/services platf/server platf/server/access platf/server/auth platf/server/manager/impl platf/server/rpc workspace/client/socialnet
Author: vjrj Date: 2008-08-07 14:07:05 +0200 (Thu, 07 Aug 2008) New Revision: 833 Added: trunk/src/main/java/org/ourproject/kune/platf/server/auth/GroupAuthorizated.java trunk/src/main/java/org/ourproject/kune/platf/server/auth/GroupAuthorizatedMethodInterceptor.java Modified: trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java trunk/src/main/java/org/ourproject/kune/platf/server/PlatformServerModule.java trunk/src/main/java/org/ourproject/kune/platf/server/access/AccessRightsService.java trunk/src/main/java/org/ourproject/kune/platf/server/access/AccessRightsServiceDefault.java trunk/src/main/java/org/ourproject/kune/platf/server/access/AccessServiceDefault.java trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/GroupManagerDefault.java trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/SocialNetworkManagerDefault.java trunk/src/main/java/org/ourproject/kune/platf/server/rpc/GroupRPC.java trunk/src/main/java/org/ourproject/kune/platf/server/rpc/SocialNetworkRPC.java trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/GroupMembersSummaryPresenter.java Log: Group authorization annotation for check authRights in methods Modified: trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java 2008-08-06 04:21:36 UTC (rev 832) +++ trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java 2008-08-07 12:07:05 UTC (rev 833) @@ -501,7 +501,7 @@ public GroupMembersSummary create() { final GroupMembersSummaryPresenter presenter = new GroupMembersSummaryPresenter(i18n, $(StateManager.class), $(ImageUtils.class), $(Session.class), - $$(SocialNetworkServiceAsync.class), $$(UserLiveSearcher.class), $(WsThemePresenter.class)); + $$(SocialNetworkServiceAsync.class), $$(GroupLiveSearcher.class), $(WsThemePresenter.class)); final GroupMembersSummaryView view = new GroupMembersSummaryPanel(presenter, i18n, ws); presenter.init(view); return presenter; Modified: trunk/src/main/java/org/ourproject/kune/platf/server/PlatformServerModule.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/server/PlatformServerModule.java 2008-08-06 04:21:36 UTC (rev 832) +++ trunk/src/main/java/org/ourproject/kune/platf/server/PlatformServerModule.java 2008-08-07 12:07:05 UTC (rev 833) @@ -31,6 +31,8 @@ import org.ourproject.kune.platf.client.rpc.SiteService; import org.ourproject.kune.platf.client.rpc.SocialNetworkService; import org.ourproject.kune.platf.client.services.I18nTranslationService; +import org.ourproject.kune.platf.server.access.AccessRightsService; +import org.ourproject.kune.platf.server.access.AccessRightsServiceDefault; import org.ourproject.kune.platf.server.access.AccessService; import org.ourproject.kune.platf.server.access.AccessServiceDefault; import org.ourproject.kune.platf.server.access.FinderService; @@ -39,6 +41,8 @@ import org.ourproject.kune.platf.server.auth.AuthenticatedMethodInterceptor; import org.ourproject.kune.platf.server.auth.Authorizated; import org.ourproject.kune.platf.server.auth.AuthorizatedMethodInterceptor; +import org.ourproject.kune.platf.server.auth.GroupAuthorizated; +import org.ourproject.kune.platf.server.auth.GroupAuthorizatedMethodInterceptor; import org.ourproject.kune.platf.server.auth.SessionService; import org.ourproject.kune.platf.server.auth.SessionServiceDefault; import org.ourproject.kune.platf.server.content.CommentManager; @@ -94,55 +98,58 @@ public class PlatformServerModule extends AbstractExtendedModule { @Override protected void configure() { - install(PersistenceService.usingJpa().across(UnitOfWork.TRANSACTION).buildModule()); - bind(KunePersistenceService.class); + install(PersistenceService.usingJpa().across(UnitOfWork.TRANSACTION).buildModule()); + bind(KunePersistenceService.class); - bindManagers(); - bindRPC(); - bindServices(); - bind(KuneProperties.class).to(KunePropertiesDefault.class); - bind(Mapper.class).to(DozerMapper.class); - bind(ToolRegistry.class); + bindManagers(); + bindRPC(); + bindServices(); + bind(KuneProperties.class).to(KunePropertiesDefault.class); + bind(Mapper.class).to(DozerMapper.class); + bind(ToolRegistry.class); - bindInterceptor(Matchers.any(), Matchers.annotatedWith(Authenticated.class), - outermostCall(new AuthenticatedMethodInterceptor())); - bindInterceptor(Matchers.any(), Matchers.annotatedWith(Authorizated.class), - outermostCall(new AuthorizatedMethodInterceptor())); + bindInterceptor(Matchers.any(), Matchers.annotatedWith(Authenticated.class), + outermostCall(new AuthenticatedMethodInterceptor())); + bindInterceptor(Matchers.any(), Matchers.annotatedWith(Authorizated.class), + outermostCall(new AuthorizatedMethodInterceptor())); + bindInterceptor(Matchers.any(), Matchers.annotatedWith(GroupAuthorizated.class), + outermostCall(new GroupAuthorizatedMethodInterceptor())); } private void bindManagers() { - bind(UserManager.class).to(UserManagerDefault.class); - bind(GroupManager.class).to(GroupManagerDefault.class); - bind(ContentManager.class).to(ContentManagerDefault.class); - bind(ToolConfigurationManager.class).to(ToolConfigurationManagerDefault.class); - bind(ContainerManager.class).to(ContainerManagerDefault.class); - bind(LicenseManager.class).to(LicenseManagerDefault.class); - bind(SocialNetworkManager.class).to(SocialNetworkManagerDefault.class); - bind(XmppManager.class).to(XmppManagerDefault.class); - bind(RateManager.class).to(RateManagerDefault.class); - bind(I18nCountryManager.class).to(I18nCountryManagerDefault.class); - bind(I18nLanguageManager.class).to(I18nLanguageManagerDefault.class); - bind(I18nTranslationManager.class).to(I18nTranslationManagerDefault.class); - bind(TagManager.class).to(TagManagerDefault.class); - bind(CommentManager.class).to(CommentManagerDefault.class); + bind(UserManager.class).to(UserManagerDefault.class); + bind(GroupManager.class).to(GroupManagerDefault.class); + bind(ContentManager.class).to(ContentManagerDefault.class); + bind(ToolConfigurationManager.class).to(ToolConfigurationManagerDefault.class); + bind(ContainerManager.class).to(ContainerManagerDefault.class); + bind(LicenseManager.class).to(LicenseManagerDefault.class); + bind(SocialNetworkManager.class).to(SocialNetworkManagerDefault.class); + bind(XmppManager.class).to(XmppManagerDefault.class); + bind(RateManager.class).to(RateManagerDefault.class); + bind(I18nCountryManager.class).to(I18nCountryManagerDefault.class); + bind(I18nLanguageManager.class).to(I18nLanguageManagerDefault.class); + bind(I18nTranslationManager.class).to(I18nTranslationManagerDefault.class); + bind(TagManager.class).to(TagManagerDefault.class); + bind(CommentManager.class).to(CommentManagerDefault.class); } private void bindRPC() { - bind(SiteService.class).to(SiteRPC.class); - bind(GroupService.class).to(GroupRPC.class); - bind(ContentService.class).to(ContentRPC.class); - bind(UserService.class).to(UserRPC.class); - bind(SocialNetworkService.class).to(SocialNetworkRPC.class); - bind(I18nService.class).to(I18nRPC.class); + bind(SiteService.class).to(SiteRPC.class); + bind(GroupService.class).to(GroupRPC.class); + bind(ContentService.class).to(ContentRPC.class); + bind(UserService.class).to(UserRPC.class); + bind(SocialNetworkService.class).to(SocialNetworkRPC.class); + bind(I18nService.class).to(I18nRPC.class); } private void bindServices() { - bind(UserInfoService.class).to(UserInfoServiceDefault.class); - bind(CreationService.class).to(CreationServiceDefault.class); - bind(AccessService.class).to(AccessServiceDefault.class); - bind(FinderService.class).to(FinderServiceDefault.class); - bind(StateService.class).to(StateServiceDefault.class); - bind(I18nTranslationService.class).to(I18nTranslationServiceDefault.class); - bind(SessionService.class).to(SessionServiceDefault.class); + bind(UserInfoService.class).to(UserInfoServiceDefault.class); + bind(CreationService.class).to(CreationServiceDefault.class); + bind(AccessRightsService.class).to(AccessRightsServiceDefault.class); + bind(AccessService.class).to(AccessServiceDefault.class); + bind(FinderService.class).to(FinderServiceDefault.class); + bind(StateService.class).to(StateServiceDefault.class); + bind(I18nTranslationService.class).to(I18nTranslationServiceDefault.class); + bind(SessionService.class).to(SessionServiceDefault.class); } } Modified: trunk/src/main/java/org/ourproject/kune/platf/server/access/AccessRightsService.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/server/access/AccessRightsService.java 2008-08-06 04:21:36 UTC (rev 832) +++ trunk/src/main/java/org/ourproject/kune/platf/server/access/AccessRightsService.java 2008-08-07 12:07:05 UTC (rev 833) @@ -23,7 +23,7 @@ import org.ourproject.kune.platf.server.domain.AccessLists; import org.ourproject.kune.platf.server.domain.User; -interface AccessRightsService { +public interface AccessRightsService { public AccessRights get(User user, AccessLists lists); Modified: trunk/src/main/java/org/ourproject/kune/platf/server/access/AccessRightsServiceDefault.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/server/access/AccessRightsServiceDefault.java 2008-08-06 04:21:36 UTC (rev 832) +++ trunk/src/main/java/org/ourproject/kune/platf/server/access/AccessRightsServiceDefault.java 2008-08-07 12:07:05 UTC (rev 833) @@ -29,52 +29,55 @@ import org.ourproject.kune.platf.server.domain.SocialNetwork; import org.ourproject.kune.platf.server.domain.User; +import com.google.inject.Singleton; + +@Singleton public class AccessRightsServiceDefault implements AccessRightsService { // TODO: check performance - public AccessRights get(final User user, final AccessLists lists) { - return get(user.getUserGroup(), lists); - } - public AccessRights get(final Group userGroup, final AccessLists accessList) { - boolean isAdministrable = false; - boolean isEditable = false; - boolean isVisible = false; + boolean isAdministrable = false; + boolean isEditable = false; + boolean isVisible = false; - // FIXME, future: admin users can admin, edit, view everything - // (not now while we are doing tests) - isVisible = isEditable = isAdministrable = canAccess(userGroup, accessList, AccessRol.Administrator); - if (!isEditable) { - isVisible = isEditable = canAccess(userGroup, accessList, AccessRol.Editor); - } - if (!isVisible) { - isVisible = accessList.getViewers().isEmpty() || canAccess(userGroup, accessList, AccessRol.Viewer); - } + // FIXME, future: admin users can admin, edit, view everything + // (not now while we are doing tests) + isVisible = isEditable = isAdministrable = canAccess(userGroup, accessList, AccessRol.Administrator); + if (!isEditable) { + isVisible = isEditable = canAccess(userGroup, accessList, AccessRol.Editor); + } + if (!isVisible) { + isVisible = accessList.getViewers().isEmpty() || canAccess(userGroup, accessList, AccessRol.Viewer); + } - return new AccessRights(isAdministrable, isEditable, isVisible); + return new AccessRights(isAdministrable, isEditable, isVisible); } + public AccessRights get(final User user, final AccessLists lists) { + return get(user.getUserGroup(), lists); + } + private boolean canAccess(final Group searchedGroup, final AccessLists lists, final AccessRol rol) { - GroupList list = lists.getList(rol); - return depthFirstSearch(new HashSet<Group>(), searchedGroup, list, rol); + final GroupList list = lists.getList(rol); + return depthFirstSearch(new HashSet<Group>(), searchedGroup, list, rol); } /* * http://en.wikipedia.org/wiki/Depth-first_search */ private boolean depthFirstSearch(final HashSet<Group> visited, final Group searchedGroup, final GroupList list, - final AccessRol rol) { - if (list.includes(searchedGroup)) { - return true; - } - ArrayList<Group> noVisitedYet = list.duplicate(); - noVisitedYet.removeAll(visited); - for (Group group : noVisitedYet) { - visited.add(group); - SocialNetwork socialNetwork = group.getSocialNetwork(); - GroupList groupList = socialNetwork.getAccessLists().getList(rol); - return depthFirstSearch(visited, searchedGroup, groupList, rol); - } - return false; + final AccessRol rol) { + if (list.includes(searchedGroup)) { + return true; + } + final ArrayList<Group> noVisitedYet = list.duplicate(); + noVisitedYet.removeAll(visited); + for (final Group group : noVisitedYet) { + visited.add(group); + final SocialNetwork socialNetwork = group.getSocialNetwork(); + final GroupList groupList = socialNetwork.getAccessLists().getList(rol); + return depthFirstSearch(visited, searchedGroup, groupList, rol); + } + return false; } } Modified: trunk/src/main/java/org/ourproject/kune/platf/server/access/AccessServiceDefault.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/server/access/AccessServiceDefault.java 2008-08-06 04:21:36 UTC (rev 832) +++ trunk/src/main/java/org/ourproject/kune/platf/server/access/AccessServiceDefault.java 2008-08-07 12:07:05 UTC (rev 833) @@ -41,6 +41,7 @@ private final AccessRightsService accessRightsService; private final Group groupFinder; + @Inject public AccessServiceDefault(final FinderService finder, final AccessRightsService accessRightsService, final Group groupFinder) { this.finder = finder; @@ -48,11 +49,6 @@ this.groupFinder = groupFinder; } - @Inject - public AccessServiceDefault(final FinderService finder, final Group groupFinder) { - this(finder, new AccessRightsServiceDefault(), groupFinder); - } - public Content accessToContent(final Long contentId, final User user, final AccessType accessType) throws DefaultException { final Content descriptor = finder.getContent(contentId); Added: trunk/src/main/java/org/ourproject/kune/platf/server/auth/GroupAuthorizated.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/server/auth/GroupAuthorizated.java 2008-08-06 04:21:36 UTC (rev 832) +++ trunk/src/main/java/org/ourproject/kune/platf/server/auth/GroupAuthorizated.java 2008-08-07 12:07:05 UTC (rev 833) @@ -0,0 +1,24 @@ +package org.ourproject.kune.platf.server.auth; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +import org.ourproject.kune.platf.server.access.AccessType; + +import com.google.inject.BindingAnnotation; + +/** + * Use in RPC methods, for instance: <code> + * GroupAuthorizated(authLevelRequired = AuthLevelRequired.COLLAB) </code> + * + * The first parameter in the method must be the userHash, the second the group + * shortName + * + */ +@BindingAnnotation +@Retention(RetentionPolicy.RUNTIME) +public @interface GroupAuthorizated { + + AccessType accessTypeRequired() default AccessType.READ; + +} Added: trunk/src/main/java/org/ourproject/kune/platf/server/auth/GroupAuthorizatedMethodInterceptor.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/server/auth/GroupAuthorizatedMethodInterceptor.java 2008-08-06 04:21:36 UTC (rev 832) +++ trunk/src/main/java/org/ourproject/kune/platf/server/auth/GroupAuthorizatedMethodInterceptor.java 2008-08-07 12:07:05 UTC (rev 833) @@ -0,0 +1,89 @@ +/* + * + * Copyright (C) 2007-2008 The kune development team (see CREDITS for details) + * This file is part of kune. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ +package org.ourproject.kune.platf.server.auth; + +import javax.persistence.NoResultException; + +import org.aopalliance.intercept.MethodInterceptor; +import org.aopalliance.intercept.MethodInvocation; +import org.ourproject.kune.platf.client.errors.AccessViolationException; +import org.ourproject.kune.platf.server.UserSession; +import org.ourproject.kune.platf.server.access.AccessRights; +import org.ourproject.kune.platf.server.access.AccessRightsService; +import org.ourproject.kune.platf.server.access.AccessType; +import org.ourproject.kune.platf.server.domain.Group; +import org.ourproject.kune.platf.server.domain.User; +import org.ourproject.kune.platf.server.manager.GroupManager; + +import com.google.inject.Inject; +import com.google.inject.Provider; + +public class GroupAuthorizatedMethodInterceptor implements MethodInterceptor { + + @Inject + Provider<UserSession> userSessionProvider; + @Inject + Provider<GroupManager> groupManagerProvider; + @Inject + Provider<AccessRightsService> accessRightsServiceProvider; + + public Object invoke(final MethodInvocation invocation) throws Throwable { + final Object[] arguments = invocation.getArguments(); + final String groupShortName = (String) arguments[1]; + + final UserSession userSession = userSessionProvider.get(); + final GroupManager groupManager = groupManagerProvider.get(); + + final GroupAuthorizated authoAnnotation = invocation.getStaticPart().getAnnotation(GroupAuthorizated.class); + final AccessType accessType = authoAnnotation.accessTypeRequired(); + + final User user = userSession.getUser(); + + Group group = Group.NO_GROUP; + try { + group = groupManager.findByShortName(groupShortName); + } catch (final NoResultException e) { + throw new AccessViolationException(); + } + + if (!correctMember(user, group, accessType)) { + throw new AccessViolationException(); + } + + final Object result = invocation.proceed(); + return result; + } + + private boolean correctMember(final User user, final Group group, final AccessType memberType) + throws AccessViolationException { + final AccessRightsService accessRightsService = accessRightsServiceProvider.get(); + final AccessRights accessRights = accessRightsService.get(user, group.getSocialNetwork().getAccessLists()); + + switch (memberType) { + case ADMIN: + return accessRights.isAdministrable(); + case EDIT: + return accessRights.isEditable(); + default: + return accessRights.isVisible(); + } + } + +} Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/GroupManagerDefault.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/GroupManagerDefault.java 2008-08-06 04:21:36 UTC (rev 832) +++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/GroupManagerDefault.java 2008-08-07 12:07:05 UTC (rev 833) @@ -64,135 +64,131 @@ @Inject public GroupManagerDefault(final Provider<EntityManager> provider, final Group finder, final User userFinder, - final KuneProperties kuneProperties, final DatabaseProperties properties, final ToolRegistry registry, - final License licenseFinder) { - super(provider, Group.class); - this.finder = finder; - this.userFinder = userFinder; - this.kuneProperties = kuneProperties; - this.properties = properties; - this.registry = registry; - this.licenseFinder = licenseFinder; + final KuneProperties kuneProperties, final DatabaseProperties properties, final ToolRegistry registry, + final License licenseFinder) { + super(provider, Group.class); + this.finder = finder; + this.userFinder = userFinder; + this.kuneProperties = kuneProperties; + this.properties = properties; + this.registry = registry; + this.licenseFinder = licenseFinder; } - public Group getDefaultGroup() { - final String shortName = properties.getDefaultSiteShortName(); - return findByShortName(shortName); + public void changeWsTheme(final User user, final Group group, final String theme) throws AccessViolationException { + // TODO: check theme + group.setWorkspaceTheme(theme); } - public Group findByShortName(final String shortName) { - return finder.findByShortName(shortName); + public Group createGroup(final Group group, final User user) throws GroupNameInUseException, + UserMustBeLoggedException { + final String defaultSiteWorkspaceTheme = kuneProperties.get(KuneProperties.WS_THEMES_DEF); + if (User.isKnownUser(user)) { + if (group.getType().equals(GroupType.COMMUNITY)) { + group.setAdmissionType(AdmissionType.Open); + } else if (group.getType().equals(GroupType.ORGANIZATION)) { + group.setAdmissionType(AdmissionType.Moderated); + } else if (group.getType().equals(GroupType.PROJECT)) { + group.setAdmissionType(AdmissionType.Moderated); + } else if (group.getType().equals(GroupType.ORPHANED_PROJECT)) { + group.setAdmissionType(AdmissionType.Open); + } + final String licName = group.getDefaultLicense().getShortName(); + final License license = licenseFinder.findByShortName(licName); + group.setDefaultLicense(license); + group.setWorkspaceTheme(defaultSiteWorkspaceTheme); + initSocialNetwork(group, user.getUserGroup()); + initGroup(user, group); + return group; + } else { + throw new UserMustBeLoggedException(); + } + } - public List<Group> findAdminInGroups(final Long groupId) { - return finder.findAdminInGroups(groupId); + public Group createUserGroup(final User user) throws GroupNameInUseException, EmailAddressInUseException { + final String defaultSiteWorkspaceTheme = kuneProperties.get(KuneProperties.WS_THEMES_DEF); + final String licenseDefId = properties.getDefaultLicense(); + final License licenseDef = licenseFinder.findByShortName(licenseDefId); + final Group group = new Group(user.getShortName(), user.getName(), licenseDef, GroupType.PERSONAL); + User userSameEmail = null; + try { + userSameEmail = userFinder.getByEmail(user.getEmail()); + } catch (final NoResultException e) { + // Ok, no more with this email + } + if (userSameEmail != null) { + throw new EmailAddressInUseException(); + } + group.setAdmissionType(AdmissionType.Closed); + group.setWorkspaceTheme(defaultSiteWorkspaceTheme); + user.setUserGroup(group); + initSocialNetwork(group, group); + try { + initGroup(user, group); + super.persist(user, User.class); + } catch (final EntityExistsException e) { + throw new GroupNameInUseException(); + } + return group; } - public List<Group> findCollabInGroups(final Long groupId) { - return finder.findCollabInGroups(groupId); + public List<Group> findAdminInGroups(final Long groupId) { + return finder.findAdminInGroups(groupId); } - public Group createUserGroup(final User user) throws GroupNameInUseException, EmailAddressInUseException { - String defaultSiteWorkspaceTheme = kuneProperties.get(KuneProperties.WS_THEMES_DEF); - final String licenseDefId = properties.getDefaultLicense(); - final License licenseDef = licenseFinder.findByShortName(licenseDefId); - final Group group = new Group(user.getShortName(), user.getName(), licenseDef, GroupType.PERSONAL); - User userSameEmail = null; - try { - userSameEmail = userFinder.getByEmail(user.getEmail()); - } catch (NoResultException e) { - // Ok, no more with this email - } - if (userSameEmail != null) { - throw new EmailAddressInUseException(); - } - group.setAdmissionType(AdmissionType.Closed); - group.setWorkspaceTheme(defaultSiteWorkspaceTheme); - user.setUserGroup(group); - initSocialNetwork(group, group); - try { - initGroup(user, group); - super.persist(user, User.class); - } catch (final EntityExistsException e) { - throw new GroupNameInUseException(); - } - return group; + public Group findByShortName(final String shortName) { + return finder.findByShortName(shortName); } - public Group createGroup(final Group group, final User user) throws GroupNameInUseException, - UserMustBeLoggedException { - String defaultSiteWorkspaceTheme = kuneProperties.get(KuneProperties.WS_THEMES_DEF); - if (User.isKnownUser(user)) { - if (group.getType().equals(GroupType.COMMUNITY)) { - group.setAdmissionType(AdmissionType.Open); - } else if (group.getType().equals(GroupType.ORGANIZATION)) { - group.setAdmissionType(AdmissionType.Moderated); - } else if (group.getType().equals(GroupType.PROJECT)) { - group.setAdmissionType(AdmissionType.Moderated); - } else if (group.getType().equals(GroupType.ORPHANED_PROJECT)) { - group.setAdmissionType(AdmissionType.Open); - } - String licName = group.getDefaultLicense().getShortName(); - License license = licenseFinder.findByShortName(licName); - group.setDefaultLicense(license); - group.setWorkspaceTheme(defaultSiteWorkspaceTheme); - initSocialNetwork(group, user.getUserGroup()); - initGroup(user, group); - return group; - } else { - throw new UserMustBeLoggedException(); - } - + public List<Group> findCollabInGroups(final Long groupId) { + return finder.findCollabInGroups(groupId); } - public void changeWsTheme(final User user, final Group group, final String theme) throws AccessViolationException { - if (group.getSocialNetwork().isAdmin(user.getUserGroup())) { - group.setWorkspaceTheme(theme); - // Check themes... - } else { - throw new AccessViolationException(); - } + public Group getDefaultGroup() { + final String shortName = properties.getDefaultSiteShortName(); + return findByShortName(shortName); } public Group getGroupOfUserWithId(final Long userId) { - return userId != null ? find(User.class, userId).getUserGroup() : null; + return userId != null ? find(User.class, userId).getUserGroup() : null; } public SearchResult<Group> search(final String search) { - return this.search(search, null, null); + return this.search(search, null, null); } public SearchResult<Group> search(final String search, final Integer firstResult, final Integer maxResults) { - MultiFieldQueryParser parser = new MultiFieldQueryParser( - new String[] { "longName", "shortName", "publicDesc" }, new StandardAnalyzer()); - Query query; - try { - query = parser.parse(search); - } catch (ParseException e) { - throw new RuntimeException("Error parsing search"); - } - return super.search(query, firstResult, maxResults); + final MultiFieldQueryParser parser = new MultiFieldQueryParser(new String[] { "longName", "shortName", + "publicDesc" }, new StandardAnalyzer()); + Query query; + try { + query = parser.parse(search); + } catch (final ParseException e) { + throw new RuntimeException("Error parsing search"); + } + return super.search(query, firstResult, maxResults); } - private void initSocialNetwork(final Group group, final Group userGroup) { - final SocialNetwork network = group.getSocialNetwork(); - final AccessLists lists = network.getAccessLists(); - lists.getEditors().setMode(GroupListMode.NOBODY); - lists.getViewers().setMode(GroupListMode.EVERYONE); - if (!group.getType().equals(GroupType.ORPHANED_PROJECT)) { - network.addAdmin(userGroup); - } + private void initGroup(final User user, final Group group) throws GroupNameInUseException { + try { + persist(group); + } catch (final EntityExistsException e) { + throw new GroupNameInUseException(); + } + for (final ServerTool tool : registry.all()) { + tool.initGroup(user, group); + } } - private void initGroup(final User user, final Group group) throws GroupNameInUseException { - try { - persist(group); - } catch (final EntityExistsException e) { - throw new GroupNameInUseException(); - } - for (final ServerTool tool : registry.all()) { - tool.initGroup(user, group); - } + private void initSocialNetwork(final Group group, final Group userGroup) { + final SocialNetwork network = group.getSocialNetwork(); + final AccessLists lists = network.getAccessLists(); + lists.getEditors().setMode(GroupListMode.NOBODY); + lists.getViewers().setMode(GroupListMode.EVERYONE); + if (!group.getType().equals(GroupType.ORPHANED_PROJECT)) { + network.addAdmin(userGroup); + } } } Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/SocialNetworkManagerDefault.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/SocialNetworkManagerDefault.java 2008-08-06 04:21:36 UTC (rev 832) +++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/SocialNetworkManagerDefault.java 2008-08-07 12:07:05 UTC (rev 833) @@ -34,6 +34,7 @@ import org.ourproject.kune.platf.client.errors.LastAdminInGroupException; import org.ourproject.kune.platf.client.errors.UserMustBeLoggedException; import org.ourproject.kune.platf.server.ParticipationData; +import org.ourproject.kune.platf.server.access.AccessRightsService; import org.ourproject.kune.platf.server.domain.AdmissionType; import org.ourproject.kune.platf.server.domain.Group; import org.ourproject.kune.platf.server.domain.GroupListMode; @@ -51,11 +52,14 @@ public class SocialNetworkManagerDefault extends DefaultManager<SocialNetwork, Long> implements SocialNetworkManager { private final Group finder; + private final AccessRightsService accessRightsService; @Inject - public SocialNetworkManagerDefault(final Provider<EntityManager> provider, final Group finder) { + public SocialNetworkManagerDefault(final Provider<EntityManager> provider, final Group finder, + final AccessRightsService accessRightsService) { super(provider, SocialNetwork.class); this.finder = finder; + this.accessRightsService = accessRightsService; } public void acceptJoinGroup(final User userLogged, final Group group, final Group inGroup) throws DefaultException, @@ -252,7 +256,7 @@ } private void checkUserLoggedIsAdmin(final User userLogged, final SocialNetwork sn) throws AccessViolationException { - if (!sn.isAdmin(userLogged.getUserGroup())) { + if (!accessRightsService.get(userLogged, sn.getAccessLists()).isAdministrable()) { throw new AccessViolationException(); } } Modified: trunk/src/main/java/org/ourproject/kune/platf/server/rpc/GroupRPC.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/server/rpc/GroupRPC.java 2008-08-06 04:21:36 UTC (rev 832) +++ trunk/src/main/java/org/ourproject/kune/platf/server/rpc/GroupRPC.java 2008-08-07 12:07:05 UTC (rev 833) @@ -29,7 +29,7 @@ import org.ourproject.kune.platf.server.UserSession; import org.ourproject.kune.platf.server.access.AccessType; import org.ourproject.kune.platf.server.auth.Authenticated; -import org.ourproject.kune.platf.server.auth.Authorizated; +import org.ourproject.kune.platf.server.auth.GroupAuthorizated; import org.ourproject.kune.platf.server.content.ContentManager; import org.ourproject.kune.platf.server.domain.Group; import org.ourproject.kune.platf.server.domain.User; @@ -60,7 +60,7 @@ } @Authenticated - @Authorizated(accessTypeRequired = AccessType.ADMIN) + @GroupAuthorizated(accessTypeRequired = AccessType.ADMIN) @Transactional(type = TransactionType.READ_WRITE, rollbackOn = DefaultException.class) public void changeGroupWsTheme(final String userHash, final String groupShortName, final String theme) throws DefaultException { Modified: trunk/src/main/java/org/ourproject/kune/platf/server/rpc/SocialNetworkRPC.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/server/rpc/SocialNetworkRPC.java 2008-08-06 04:21:36 UTC (rev 832) +++ trunk/src/main/java/org/ourproject/kune/platf/server/rpc/SocialNetworkRPC.java 2008-08-07 12:07:05 UTC (rev 833) @@ -27,7 +27,7 @@ import org.ourproject.kune.platf.server.UserSession; import org.ourproject.kune.platf.server.access.AccessType; import org.ourproject.kune.platf.server.auth.Authenticated; -import org.ourproject.kune.platf.server.auth.Authorizated; +import org.ourproject.kune.platf.server.auth.GroupAuthorizated; import org.ourproject.kune.platf.server.domain.Group; import org.ourproject.kune.platf.server.domain.User; import org.ourproject.kune.platf.server.manager.GroupManager; @@ -58,7 +58,7 @@ } @Authenticated - @Authorizated(accessTypeRequired = AccessType.ADMIN) + @GroupAuthorizated(accessTypeRequired = AccessType.ADMIN) @Transactional(type = TransactionType.READ_WRITE) public SocialNetworkResultDTO AcceptJoinGroup(final String hash, final String groupShortName, final String groupToAcceptShortName) throws DefaultException { @@ -71,7 +71,7 @@ } @Authenticated - @Authorizated(accessTypeRequired = AccessType.ADMIN) + @GroupAuthorizated(accessTypeRequired = AccessType.ADMIN) @Transactional(type = TransactionType.READ_WRITE) public SocialNetworkResultDTO addAdminMember(final String hash, final String groupShortName, final String groupToAddShortName) throws DefaultException { @@ -84,7 +84,7 @@ } @Authenticated - @Authorizated(accessTypeRequired = AccessType.ADMIN) + @GroupAuthorizated(accessTypeRequired = AccessType.ADMIN) @Transactional(type = TransactionType.READ_WRITE) public SocialNetworkResultDTO addCollabMember(final String hash, final String groupShortName, final String groupToAddShortName) throws DefaultException { @@ -97,7 +97,7 @@ } @Authenticated - @Authorizated(accessTypeRequired = AccessType.ADMIN) + @GroupAuthorizated(accessTypeRequired = AccessType.ADMIN) @Transactional(type = TransactionType.READ_WRITE) public SocialNetworkResultDTO addViewerMember(final String hash, final String groupShortName, final String groupToAddShortName) throws DefaultException { @@ -110,7 +110,7 @@ } @Authenticated - @Authorizated(accessTypeRequired = AccessType.ADMIN) + @GroupAuthorizated(accessTypeRequired = AccessType.ADMIN) @Transactional(type = TransactionType.READ_WRITE) public SocialNetworkResultDTO deleteMember(final String hash, final String groupShortName, final String groupToDeleleShortName) throws DefaultException { @@ -123,7 +123,7 @@ } @Authenticated - @Authorizated(accessTypeRequired = AccessType.ADMIN) + @GroupAuthorizated(accessTypeRequired = AccessType.ADMIN) @Transactional(type = TransactionType.READ_WRITE) public SocialNetworkResultDTO denyJoinGroup(final String hash, final String groupShortName, final String groupToDenyShortName) throws DefaultException { @@ -137,7 +137,7 @@ @Authenticated(mandatory = false) // At least you can access as Viewer to the Group - @Authorizated(accessTypeRequired = AccessType.READ) + @GroupAuthorizated(accessTypeRequired = AccessType.READ) @Transactional(type = TransactionType.READ_ONLY) public SocialNetworkDTO getGroupMembers(final String hash, final String groupShortName) throws DefaultException { final UserSession userSession = getUserSession(); @@ -148,7 +148,7 @@ @Authenticated(mandatory = false) // At least you can access as Viewer to the Group - @Authorizated(accessTypeRequired = AccessType.READ) + @GroupAuthorizated(accessTypeRequired = AccessType.READ) @Transactional(type = TransactionType.READ_ONLY) public ParticipationDataDTO getParticipation(final String hash, final String groupShortName) throws DefaultException { @@ -168,7 +168,7 @@ } @Authenticated - @Authorizated(accessTypeRequired = AccessType.ADMIN) + @GroupAuthorizated(accessTypeRequired = AccessType.ADMIN) @Transactional(type = TransactionType.READ_WRITE) public SocialNetworkResultDTO setAdminAsCollab(final String hash, final String groupShortName, final String groupToSetCollabShortName) throws DefaultException { @@ -181,7 +181,7 @@ } @Authenticated - @Authorizated(accessTypeRequired = AccessType.ADMIN) + @GroupAuthorizated(accessTypeRequired = AccessType.ADMIN) @Transactional(type = TransactionType.READ_WRITE) public SocialNetworkResultDTO setCollabAsAdmin(final String hash, final String groupShortName, final String groupToSetAdminShortName) throws DefaultException { Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/GroupMembersSummaryPresenter.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/GroupMembersSummaryPresenter.java 2008-08-06 04:21:36 UTC (rev 832) +++ trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/GroupMembersSummaryPresenter.java 2008-08-07 12:07:05 UTC (rev 833) @@ -18,7 +18,7 @@ import org.ourproject.kune.platf.client.ui.gridmenu.GridButton; import org.ourproject.kune.platf.client.ui.gridmenu.GridGroup; import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService; -import org.ourproject.kune.workspace.client.search.UserLiveSearcher; +import org.ourproject.kune.workspace.client.search.GroupLiveSearcher; import org.ourproject.kune.workspace.client.sitebar.Site; import org.ourproject.kune.workspace.client.ui.newtmp.themes.WsTheme; import org.ourproject.kune.workspace.client.ui.newtmp.themes.WsThemePresenter; @@ -42,7 +42,7 @@ public GroupMembersSummaryPresenter(final I18nUITranslationService i18n, final StateManager stateManager, final ImageUtils imageUtils, final Session session, final Provider<SocialNetworkServiceAsync> snServiceProvider, - final Provider<UserLiveSearcher> userLiveSearcherProvider, final WsThemePresenter wsThemePresenter) { + final Provider<GroupLiveSearcher> liveSearcherProvider, final WsThemePresenter wsThemePresenter) { super(i18n, stateManager, imageUtils, session, snServiceProvider); this.i18n = i18n; this.stateManager = stateManager; @@ -73,12 +73,12 @@ addMember = new GridButton("images/add-green.gif", "", i18n .t("Add a group or a person as member of this group"), new Slot<String>() { public void onEvent(final String parameter) { - userLiveSearcherProvider.get().onSelection(new Slot<LinkDTO>() { + liveSearcherProvider.get().onSelection(new Slot<LinkDTO>() { public void onEvent(final LinkDTO link) { view.confirmAddCollab(link.getShortName(), link.getLongName()); } }); - userLiveSearcherProvider.get().show(); + liveSearcherProvider.get().show(); } }); super.addGroupOperation(gotoGroupMenuItem, false);
participants (1)
-
vjrj