]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.security.core/src/org/argeo/osgi/useradmin/LdifAuthorization.java
Add Authorization, with chained groups
[lgpl/argeo-commons.git] / org.argeo.security.core / src / org / argeo / osgi / useradmin / LdifAuthorization.java
diff --git a/org.argeo.security.core/src/org/argeo/osgi/useradmin/LdifAuthorization.java b/org.argeo.security.core/src/org/argeo/osgi/useradmin/LdifAuthorization.java
new file mode 100644 (file)
index 0000000..4ae2434
--- /dev/null
@@ -0,0 +1,54 @@
+package org.argeo.osgi.useradmin;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.osgi.service.useradmin.Authorization;
+import org.osgi.service.useradmin.Role;
+
+public class LdifAuthorization implements Authorization {
+       private final LdifUser user;
+
+       public LdifAuthorization(LdifUser user) {
+               this.user = user;
+       }
+
+       @Override
+       public String getName() {
+               return user.getName();
+       }
+
+       @Override
+       public boolean hasRole(String name) {
+               for (Role role : getAllRoles()) {
+                       if (role.getName().equals(name))
+                               return true;
+               }
+               return false;
+       }
+
+       @Override
+       public String[] getRoles() {
+               List<Role> allRoles = getAllRoles();
+               String[] res = new String[allRoles.size() + 1];
+               res[0] = user.getName();
+               for (int i = 0; i < allRoles.size(); i++)
+                       res[i + 1] = allRoles.get(i).getName();
+               return res;
+       }
+
+       List<Role> getAllRoles() {
+               List<Role> allRoles = new ArrayList<Role>();
+               collectRoles(user, allRoles);
+               return allRoles;
+       }
+
+       private void collectRoles(LdifUser user, List<Role> allRoles) {
+               for (LdifGroup group : user.directMemberOf) {
+                       // TODO check for loops
+                       allRoles.add(group);
+                       collectRoles(group, allRoles);
+               }
+       }
+
+}