X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fuseradmin%2FJcrUserAdmin.java;h=94051d92eb0401f79d3fbe45bbffb8a969139dff;hb=6e7769555f6ee64159bbdb5780e34957d6d8895e;hp=cc402887423326a1c0f8dc155ed1c34801a71d04;hpb=ad3f61eafc04c60a725c761b3908c15027986c8c;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/internal/useradmin/JcrUserAdmin.java b/org.argeo.cms/src/org/argeo/cms/internal/useradmin/JcrUserAdmin.java index cc4028874..94051d92e 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/useradmin/JcrUserAdmin.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/useradmin/JcrUserAdmin.java @@ -1,8 +1,5 @@ package org.argeo.cms.internal.useradmin; -import static org.argeo.jcr.ArgeoJcrConstants.ALIAS_NODE; -import static org.argeo.jcr.ArgeoJcrConstants.JCR_REPOSITORY_ALIAS; - import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; @@ -14,6 +11,7 @@ import javax.jcr.RepositoryException; import javax.jcr.Session; import org.argeo.ArgeoException; +import org.argeo.jcr.JcrUtils; import org.argeo.security.UserAdminService; import org.argeo.security.jcr.JcrSecurityModel; import org.argeo.security.jcr.JcrUserDetails; @@ -28,7 +26,6 @@ import org.osgi.service.useradmin.UserAdmin; import org.osgi.service.useradmin.UserAdminEvent; import org.osgi.service.useradmin.UserAdminListener; import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UsernameNotFoundException; public class JcrUserAdmin implements UserAdmin { @@ -38,20 +35,19 @@ public class JcrUserAdmin implements UserAdmin { private final JcrSecurityModel jcrSecurityModel = new SimpleJcrSecurityModel(); private final Session session; - public JcrUserAdmin(BundleContext bundleContext) { + public JcrUserAdmin(BundleContext bundleContext, Repository node) { try { this.bundleContext = bundleContext; - - ServiceReference nodeRepo = bundleContext - .getServiceReferences(Repository.class, - "(" + JCR_REPOSITORY_ALIAS + "=" + ALIAS_NODE + ")") - .iterator().next(); - this.session = bundleContext.getService(nodeRepo).login(); + this.session = node.login(); } catch (Exception e) { throw new ArgeoException("Cannot initialize user admin", e); } } + public void destroy() { + JcrUtils.logoutQuietly(session); + } + @Override public Role createRole(String name, int type) { try { @@ -95,14 +91,15 @@ public class JcrUserAdmin implements UserAdmin { @Override public Role getRole(String name) { - if (userAdminService().listEditableRoles().contains(name)) - return new JcrGroup(name); try { - UserDetails userDetails = userAdminService().loadUserByUsername( - name); + JcrUserDetails userDetails = (JcrUserDetails) userAdminService() + .loadUserByUsername(name); return new JcrEndUser(userDetails); } catch (UsernameNotFoundException e) { - return null; + if (userAdminService().listEditableRoles().contains(name)) + return new JcrGroup(name); + else + return null; } } @@ -118,8 +115,9 @@ public class JcrUserAdmin implements UserAdmin { for (int i = 0; i < roles.size(); i++) res[i] = new JcrGroup(roles.get(i)); for (int i = 0; i < users.size(); i++) - res[roles.size() + i] = new JcrEndUser(userAdminService() - .loadUserByUsername(users.get(i))); + res[roles.size() + i] = new JcrEndUser( + (JcrUserDetails) userAdminService().loadUserByUsername( + users.get(i))); return res; } @@ -130,7 +128,7 @@ public class JcrUserAdmin implements UserAdmin { @Override public Authorization getAuthorization(User user) { - return null; + return new JcrAuthorization(((JcrEndUser) user).getUserDetails()); } private synchronized UserAdminService userAdminService() {