/** * (C) Copyright 2013 Jabylon (http://www.jabylon.org) and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.jabylon.security; import java.util.Collection; import java.util.Iterator; import java.util.List; import org.eclipse.emf.ecore.EObject; import org.jabylon.users.Role; import org.jabylon.users.User; import org.jabylon.users.UserManagement; import org.jabylon.users.UsersFactory; import org.jabylon.users.UsersPackage; public class GroupMemberAttribute extends SubjectAttribute { public GroupMemberAttribute(Collection<String> groups) { super(UsersPackage.Literals.USER__ROLES, groups); } @SuppressWarnings("unchecked") @Override public void applyTo(EObject eobject) { if (eobject instanceof User) { User user = (User) eobject; List<Role> roles = user.getRoles(); Iterator<Role> it = roles.iterator(); while (it.hasNext()) { Role role = it.next(); if(CommonPermissions.AUTH_TYPE_LDAP.equals(role.getType())) { it.remove(); } } Collection<String> groups = (Collection<String>) getValue(); EObject container = user.eContainer(); if (container instanceof UserManagement) { UserManagement management = (UserManagement) container; roles.add(checkLdapRegisteredRole(management)); List<Role> allRoles = management.getRoles(); for (Role role : allRoles) { if(CommonPermissions.AUTH_TYPE_LDAP.equals(role.getType())) { if(groups.contains(role.getName())); roles.add(role); } } } } } private Role checkLdapRegisteredRole(UserManagement management) { Role ldapRegistered = management.findRoleByName(CommonPermissions.ROLE_LDAP_REGISTERED); if(ldapRegistered==null) { ldapRegistered = UsersFactory.eINSTANCE.createRole(); ldapRegistered.setName(CommonPermissions.ROLE_LDAP_REGISTERED); ldapRegistered.setType(CommonPermissions.AUTH_TYPE_LDAP); management.getRoles().add(ldapRegistered); } return ldapRegistered; } }