All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sakaiproject.unboundid.UserAttributeRoleProvider Maven / Gradle / Ivy

The newest version!
/**
 * Copyright (c) 2003-2018 The Apereo Foundation
 *
 * Licensed under the Educational Community License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *             http://opensource.org/licenses/ecl2
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.sakaiproject.unboundid;

import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import lombok.extern.slf4j.Slf4j;

import org.sakaiproject.authz.api.RoleProvider;
import org.sakaiproject.user.api.User;
import org.sakaiproject.user.api.UserDirectoryService;
import org.sakaiproject.user.api.UserNotDefinedException;
import org.sakaiproject.util.ResourceLoader;

/**
 * This just uses attributes set on the user by the LDAP provider to determine role
 * membership.
 * @author buckett
 *
 */
@Slf4j
public class UserAttributeRoleProvider implements RoleProvider {
	private String statusAttribute;
	
	private UserDirectoryService userDirectoryService;
	
	private Map> statusRoles;
	
	private Set allRoles;
	
	private static final ResourceLoader rb = new ResourceLoader("UserAttributeRoleProvider");

	public void init() {
		if (statusRoles != null) {
			allRoles = new HashSet();
			for (String key: statusRoles.keySet()) {
				Set roles = statusRoles.get(key);
				allRoles.addAll(roles);
				statusRoles.put(key, Collections.unmodifiableSet(roles));
			}
			allRoles = Collections.unmodifiableSet(allRoles);
		} else {
			throw new IllegalStateException("statusRoles must be set");
		}
	}

	public Set getAdditionalRoles(String userId) {
		if (userId != null) {
			try {
				User user = userDirectoryService.getUser(userId);
				String status = (String) user.getProperties().get(statusAttribute);
				if (status != null && status.length() > 0) {
					Set roles = statusRoles.get(status);
					if (roles != null) {
						return roles;
					}
				}
			} catch (UserNotDefinedException e) {
				// This really shouldn't happen as this should only be called for known users
				log.warn("User couldn't be loaded to find additional roles: "+ userId, e);
			}
		}
		return Collections.emptySet();
	}

	public String getDisplayName(String role) {
		return rb.getString(role, null);
	}

	public Collection getAllAdditionalRoles() {
		return allRoles;
	}

	public void setStatusAttribute(String statusAttribute) {
		this.statusAttribute = statusAttribute;
	}

	public void setUserDirectoryService(UserDirectoryService userDirectoryService) {
		this.userDirectoryService = userDirectoryService;
	}

	public void setStatusRoles(Map> statusRoles) {
		this.statusRoles = statusRoles;
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy