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

com.liferay.portal.kernel.security.permission.resource.ModelResourcePermissionFactory Maven / Gradle / Ivy

There is a newer version: 7.4.3.112-ga112
Show newest version
/**
 * 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.kernel.security.permission.resource;

import com.liferay.petra.function.UnsafeFunction;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.internal.security.permission.resource.DefaultModelResourcePermission;
import com.liferay.portal.kernel.model.ClassedModel;
import com.liferay.portal.kernel.model.GroupedModel;
import com.liferay.portal.kernel.security.permission.resource.definition.ModelResourcePermissionDefinition;
import com.liferay.portal.kernel.service.BaseService;
import com.liferay.portal.kernel.util.ServiceProxyFactory;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.function.Consumer;
import java.util.function.ToLongFunction;
import java.util.function.UnaryOperator;

/**
 * @author Preston Crary
 */
public class ModelResourcePermissionFactory {

	public static  ModelResourcePermission create(
		Class modelClass, ToLongFunction primKeyToLongFunction,
		UnsafeFunction
			getModelUnsafeFunction,
		PortletResourcePermission portletResourcePermission,
		ModelResourcePermissionConfigurator
			modelResourcePermissionConfigurator) {

		return create(
			modelClass, primKeyToLongFunction, getModelUnsafeFunction,
			portletResourcePermission, modelResourcePermissionConfigurator,
			UnaryOperator.identity());
	}

	public static  ModelResourcePermission create(
		Class modelClass, ToLongFunction primKeyToLongFunction,
		UnsafeFunction
			getModelUnsafeFunction,
		PortletResourcePermission portletResourcePermission,
		ModelResourcePermissionConfigurator
			modelResourcePermissionConfigurator,
		UnaryOperator actionIdMapper) {

		List> modelResourcePermissionLogics =
			new ArrayList<>();

		ModelResourcePermissionDefinition modelResourcePermissionDefinition =
			new DefaultModelResourcePermissionDefinition<>(
				modelClass, primKeyToLongFunction, getModelUnsafeFunction,
				portletResourcePermission, actionIdMapper);

		ModelResourcePermission modelResourcePermission =
			new DefaultModelResourcePermission<>(
				modelResourcePermissionDefinition,
				modelResourcePermissionLogics);

		modelResourcePermissionConfigurator.
			configureModelResourcePermissionLogics(
				modelResourcePermission, modelResourcePermissionLogics::add);

		return modelResourcePermission;
	}

	@SuppressWarnings("unchecked")
	public static  ModelResourcePermission
		getInstance(
			Class declaringServiceClass,
			String fieldName, Class modelClass) {

		return ServiceProxyFactory.newServiceTrackedInstance(
			ModelResourcePermission.class, declaringServiceClass, fieldName,
			"(model.class.name=" + modelClass.getName() + ")", true);
	}

	@FunctionalInterface
	public interface ModelResourcePermissionConfigurator
		 {

		public void configureModelResourcePermissionLogics(
			ModelResourcePermission modelResourcePermission,
			Consumer> consumer);

	}

	private static class DefaultModelResourcePermissionDefinition
		
			implements ModelResourcePermissionDefinition {

		@Override
		public T getModel(long primaryKey) throws PortalException {
			return _getModelUnsafeFunction.apply(primaryKey);
		}

		@Override
		public Class getModelClass() {
			return _modelClass;
		}

		@Override
		public PortletResourcePermission getPortletResourcePermission() {
			return _portletResourcePermission;
		}

		@Override
		public long getPrimaryKey(T t) {
			return _primKeyToLongFunction.applyAsLong(t);
		}

		@Override
		public String mapActionId(String actionId) {
			return _actionIdMapper.apply(actionId);
		}

		@Override
		public void registerModelResourcePermissionLogics(
			ModelResourcePermission modelResourcePermission,
			Consumer> logicConsumer) {
		}

		private DefaultModelResourcePermissionDefinition(
			Class modelClass, ToLongFunction primKeyToLongFunction,
			UnsafeFunction
				getModelUnsafeFunction,
			PortletResourcePermission portletResourcePermission,
			UnaryOperator actionIdMapper) {

			_modelClass = Objects.requireNonNull(modelClass);
			_primKeyToLongFunction = Objects.requireNonNull(
				primKeyToLongFunction);
			_getModelUnsafeFunction = Objects.requireNonNull(
				getModelUnsafeFunction);
			_portletResourcePermission = portletResourcePermission;
			_actionIdMapper = Objects.requireNonNull(actionIdMapper);
		}

		private final UnaryOperator _actionIdMapper;
		private final UnsafeFunction
			_getModelUnsafeFunction;
		private final Class _modelClass;
		private final PortletResourcePermission _portletResourcePermission;
		private final ToLongFunction _primKeyToLongFunction;

	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy