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

com.liferay.portal.security.permission.UserBagImpl Maven / Gradle / Ivy

/**
 * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library 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 Lesser General Public License for more
 * details.
 */

package com.liferay.portal.security.permission;

import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.model.BaseModel;
import com.liferay.portal.kernel.model.Group;
import com.liferay.portal.kernel.model.Organization;
import com.liferay.portal.kernel.model.Role;
import com.liferay.portal.kernel.model.UserGroup;
import com.liferay.portal.kernel.security.permission.UserBag;
import com.liferay.portal.kernel.service.GroupLocalServiceUtil;
import com.liferay.portal.kernel.service.OrganizationLocalServiceUtil;
import com.liferay.portal.kernel.service.RoleLocalServiceUtil;
import com.liferay.portal.kernel.util.ArrayUtil;

import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * @author László Csontos
 * @author Preston Crary
 */
public class UserBagImpl implements UserBag {

	public UserBagImpl(
		long userId, long[] userGroupIds, Collection userOrgs,
		Collection userOrgGroups, Collection userUserGroups,
		long[] userUserGroupGroupIds, Collection userRoles) {

		_userId = userId;

		_userGroupIds = userGroupIds;

		Arrays.sort(_userGroupIds);

		_userOrgGroupIds = ArrayUtil.toLongArray(userOrgGroups);

		Arrays.sort(_userOrgGroupIds);

		_userOrgIds = _toSortedLongArray(userOrgs);
		_userRoleIds = _toSortedLongArray(userRoles);

		_userUserGroupGroupIds = userUserGroupGroupIds;

		Arrays.sort(_userUserGroupGroupIds);

		_userUserGroupIds = _toSortedLongArray(userUserGroups);
	}

	public UserBagImpl(
		long userId, long[] userGroupIds, Collection userOrgs,
		Collection userOrgGroups, Collection userUserGroups,
		long[] userUserGroupGroupIds, long[] userRoleIds) {

		_userId = userId;

		_userGroupIds = userGroupIds;

		Arrays.sort(userGroupIds);

		_userOrgIds = _toSortedLongArray(userOrgs);

		_userOrgGroupIds = ArrayUtil.toLongArray(userOrgGroups);

		Arrays.sort(_userOrgGroupIds);

		_userUserGroupIds = _toSortedLongArray(userUserGroups);

		_userUserGroupGroupIds = userUserGroupGroupIds;

		Arrays.sort(_userUserGroupGroupIds);

		_userRoleIds = userRoleIds;

		Arrays.sort(_userRoleIds);
	}

	@Override
	public Set getGroups() throws PortalException {
		Set groups = new HashSet<>(getUserGroups());

		groups.addAll(getUserOrgGroups());
		groups.addAll(getUserUserGroupGroups());

		return groups;
	}

	@Override
	public long[] getRoleIds() {
		return _userRoleIds.clone();
	}

	@Override
	public List getRoles() throws PortalException {
		return RoleLocalServiceUtil.getRoles(_userRoleIds);
	}

	@Override
	public long[] getUserGroupIds() {
		return _userGroupIds.clone();
	}

	@Override
	public List getUserGroups() throws PortalException {
		return GroupLocalServiceUtil.getGroups(_userGroupIds);
	}

	@Override
	public long getUserId() {
		return _userId;
	}

	@Override
	public long[] getUserOrgGroupIds() {
		return _userOrgGroupIds.clone();
	}

	@Override
	public List getUserOrgGroups() throws PortalException {
		return GroupLocalServiceUtil.getGroups(_userOrgGroupIds);
	}

	@Override
	public long[] getUserOrgIds() {
		return _userOrgIds.clone();
	}

	@Override
	public List getUserOrgs() throws PortalException {
		return OrganizationLocalServiceUtil.getOrganizations(_userOrgIds);
	}

	@Override
	public List getUserUserGroupGroups() throws PortalException {
		return GroupLocalServiceUtil.getGroups(_userUserGroupGroupIds);
	}

	@Override
	public long[] getUserUserGroupsIds() {
		return _userUserGroupIds;
	}

	@Override
	public boolean hasRole(Role role) {
		return _search(_userRoleIds, role.getRoleId());
	}

	@Override
	public boolean hasUserGroup(Group group) {
		return _search(_userGroupIds, group.getGroupId());
	}

	@Override
	public boolean hasUserOrg(Organization organization) {
		return _search(_userOrgIds, organization.getOrganizationId());
	}

	@Override
	public boolean hasUserOrgGroup(Group group) {
		return _search(_userOrgGroupIds, group.getGroupId());
	}

	private boolean _search(long[] ids, long id) {
		if (Arrays.binarySearch(ids, id) >= 0) {
			return true;
		}

		return false;
	}

	private long[] _toSortedLongArray(
		Collection> baseModels) {

		if ((baseModels == null) || baseModels.isEmpty()) {
			return _EMPTY;
		}

		long[] array = new long[baseModels.size()];

		int index = 0;

		for (BaseModel baseModel : baseModels) {
			array[index++] = (long)baseModel.getPrimaryKeyObj();
		}

		Arrays.sort(array);

		return array;
	}

	private static final long[] _EMPTY = {};

	private final long[] _userGroupIds;
	private final long _userId;
	private final long[] _userOrgGroupIds;
	private final long[] _userOrgIds;
	private final long[] _userRoleIds;
	private final long[] _userUserGroupGroupIds;
	private final long[] _userUserGroupIds;

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy