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

org.opensingular.requirement.module.spring.security.PermissionResolverService Maven / Gradle / Ivy

/*
 * Copyright (C) 2016 Singular Studios (a.k.a Atom Tecnologia) - www.opensingular.com
 *
 * Licensed under the Apache 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://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.opensingular.requirement.module.spring.security;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import javax.inject.Inject;
import javax.inject.Named;

import org.opensingular.flow.core.Flow;
import org.opensingular.flow.core.FlowDefinition;
import org.opensingular.flow.core.SingularFlowConfigurationBean;
import org.opensingular.form.SFormUtil;
import org.opensingular.lib.commons.base.SingularUtil;
import org.opensingular.lib.commons.util.Loggable;
import org.opensingular.app.commons.cache.SingularCacheForever;
import org.opensingular.app.commons.cache.SingularSessionCache;
import org.opensingular.requirement.module.form.FormAction;
import org.opensingular.requirement.module.form.FormTypesProvider;
import org.opensingular.requirement.module.service.RequirementService;

/**
 * Classe responsável por resolver as permissões do usuário em permissões do singular
 */
public class PermissionResolverService implements Loggable {

    @Inject
    protected RequirementService requirementService;

    @Inject
    @Named("peticionamentoUserDetailService")
    private SingularUserDetailsService peticionamentoUserDetailService;

    @Inject
    private Optional singularFlowConfigurationBean;

    @Inject
    private FormTypesProvider formTypesProvider;

    @SingularSessionCache
    public List searchPermissions(String idUsuario) {
        return peticionamentoUserDetailService.searchPermissions(idUsuario);
    }

    @SingularCacheForever
    public List listAllCategoryPermissions() {
        return Flow.getDefinitions().stream().map(d -> buildCategoryPermission(d.getCategory())).distinct().collect(Collectors.toList());
    }

    @SingularCacheForever
    public List listAllTypePermissions() {
        List permissions = new ArrayList<>();

        List typeNames = listAllTypeNames();

        for (String typeName : typeNames) {
            for (FormAction action : FormAction.values()) {
                String singularId = action + "_" + typeName;
                permissions.add(new SingularPermission(singularId, null));
            }
        }

        return permissions;
    }

    @SingularCacheForever
    protected List listAllTypeNames() {
        return formTypesProvider.get()
                .stream()
                .map(clazz -> SFormUtil.getTypeSimpleName(clazz).get().toUpperCase())
                .collect(Collectors.toList());
    }

    @SingularCacheForever
    public List listAllProcessesPermissions() {
        List permissions = new ArrayList<>();

        if (singularFlowConfigurationBean.isPresent()) {
            for (FlowDefinition pd : singularFlowConfigurationBean.get().getDefinitions()) {
                permissions.addAll(listPermissions(pd.getClass()));
            }
        }

        return permissions;
    }

    @SingularCacheForever
    protected List listPermissions(Class clazz) {
        return Collections.emptyList();
    }

    public SingularPermission buildCategoryPermission(String cateogryName) {
        return new SingularPermission("BOX_" + SingularUtil.normalize(cateogryName).toUpperCase(), null);
    }

    private SingularPermission buildActionPermission(String actionName, String processName) {
        String singularId = "ACTION_" + actionName + "_" + processName;
        singularId = singularId.toUpperCase();
        return new SingularPermission(singularId, null);
    }


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy