Skip to content
Snippets Groups Projects
privileges.service.ts 20.81 KiB
import { Injectable } from '@angular/core';
import { LANG } from '../app/translate.component';
import { HeaderService } from './header.service';

interface menu {
    'id': string, // identifier
    'label': string, // title
    'comment': string, // description
    'route': string, // navigate to interface
    'style': string, // icon used interface
    'unit': string, //category of administration
    'angular': boolean, // to navigate in V1 <=>V2
    'shortcut': boolean // show in panel
}

interface administration {
    'id': string, // identifier
    'label': string, // title
    'comment': string, // description
    'route': string, // navigate to interface
    'style': string, //icone used interface
    'unit': 'organisation' | 'classement' | 'production' | 'supervision' //category of administration
    'angular': boolean //to navigate in V1 <=>V2
    'hasParams' : boolean
}

interface privilege {
    'id': string, // identifier
    'label': string, // title
    'unit': string //category of administration
    'comment': string, // description
}

@Injectable()
export class PrivilegeService {

    lang: any = LANG;

    private administrations: administration[] = [
        {
            "id": "admin_users",
            "label": this.lang.users,
            "comment": this.lang.adminUsersDesc,
            "route": "/administration/users",
            "unit": "organisation",
            "style": "fa fa-user",
            "angular" : true,
            "hasParams" : true
        },
        {
            "id": "admin_groups",
            "label": this.lang.groups,
            "comment": this.lang.adminGroupsDesc,
            "route": "/administration/groups",
            "unit": "organisation",
            "style": "fa fa-users",
            "angular" : true,
            "hasParams" : false
        },
        {
            "id": "manage_entities",
            "label": this.lang.entities,
            "comment": this.lang.adminEntitiesDesc,
            "route": "/administration/entities",
            "unit": "organisation",
            "style": "fa fa-sitemap",
            "angular" : true,
            "hasParams" : false
        },
        {
            "id": "admin_listmodels",
            "label": this.lang.workflowModels,
            "comment": this.lang.adminWorkflowModelsDesc,
            "route": "/administration/diffusionModels",
            "unit": "organisation",
            "style": "fa fa-th-list",
            "angular" : true,
            "hasParams" : false
        },
        {
            "id": "admin_architecture",
            "label": this.lang.documentTypes,
            "comment": this.lang.adminDocumentTypesDesc,
            "route": "/administration/doctypes",
            "unit": "classement",
            "style": "fa fa-suitcase",
            "angular" : true,
            "hasParams" : false
        },
        {
            "id": "admin_tag",
            "label": this.lang.tags,
            "comment": this.lang.adminTagsDesc,
            "route": "index.php?page=manage_tag_list_controller&module=tags",
            "unit": "classement",
            "style": "fa fa-tags",
            "angular" : false,
            "hasParams" : false
        },
        {
            "id": "admin_baskets",
            "label": this.lang.baskets,
            "comment": this.lang.adminBasketsDesc,
            "route": "/administration/baskets",
            "unit": "production",
            "style": "fa fa-inbox",
            "angular" : true,
            "hasParams" : false
        },
        {
            "id": "admin_status",
            "label": this.lang.statuses,
            "comment": this.lang.statusesAdmin,
            "route": "/administration/statuses",
            "unit": "production",
            "style": "fa fa-check-circle",
            "angular" : true,
            "hasParams" : false
        },
        {
            "id": "admin_actions",
            "label": this.lang.actions,
            "comment": this.lang.actionsAdmin,
            "route": "/administration/actions",
            "unit": "production",
            "style": "fa fa-exchange-alt",
            "angular" : true,
            "hasParams" : false
        },
        {
            "id": "admin_contacts",
            "label": this.lang.contacts,
            "comment": this.lang.contactsAdmin,
            "route": "index.php?page=admin_contacts&admin=contacts",
            "unit": "production",
            "style": "fa fa-book",
            "angular" : false,
            "hasParams" : false
        },
        {
            "id": "admin_priorities",
            "label": this.lang.prioritiesAlt,
            "comment": this.lang.prioritiesAlt,
            "route": "/administration/priorities",
            "unit": "production",
            "style": "fa fa-clock",
            "angular" : true,
            "hasParams" : false
        },
        {
            "id": "admin_templates",
            "label": this.lang.templates,
            "comment": this.lang.templatesAdmin,
            "route": "/administration/templates",
            "unit": "production",
            "style": "fa fa-file-alt",
            "angular" : true,
            "hasParams" : false
        },
        {
            "id": "admin_indexing_models",
            "label": this.lang.indexingModels,
            "comment": this.lang.indexingModels,
            "route": "/administration/indexingModels",
            "unit": "production",
            "style": "fab fa-wpforms",
            "angular" : true,
            "hasParams" : false
        },
        {
            "id": "admin_custom_fields",
            "label": this.lang.customFieldsAdmin,
            "comment": this.lang.customFieldsAdmin,
            "route": "/administration/customFields",
            "unit": "production",
            "style": "fa fa-code",
            "angular" : true,
            "hasParams" : false
        },
        {
            "id": "admin_notif",
            "label": this.lang.notifications,
            "comment": this.lang.notificationsAdmin,
            "route": "/administration/notifications",
            "unit": "production",
            "style": "fa fa-bell",
            "angular" : true,
            "hasParams" : false
        },
        {
            "id": "update_status_mail",
            "label": this.lang.updateStatus,
            "comment": this.lang.updateStatus,
            "route": "/administration/update-status",
            "unit": "supervision",
            "style": "fa fa-envelope-square",
            "angular" : true,
            "hasParams" : false
        },
        {
            "id": "admin_docservers",
            "label": this.lang.docservers,
            "comment": this.lang.docserversAdmin,
            "route": "/administration/docservers",
            "unit": "supervision",
            "style": "fa fa-hdd",
            "angular" : true,
            "hasParams" : false
        },
        {
            "id": "admin_parameters",
            "label": this.lang.parameters,
            "comment": this.lang.parameters,
            "route": "/administration/parameters",
            "unit": "supervision",
            "style": "fa fa-wrench",
            "angular" : true,
            "hasParams" : false
        },
        {
            "id": "admin_password_rules",
            "label": this.lang.securities,
            "comment": this.lang.securities,
            "route": "/administration/securities",
            "unit": "supervision",
            "style": "fa fa-lock",
            "angular" : true,
            "hasParams" : false
        },
        {
            "id": "admin_email_server",
            "label": this.lang.emailServerParam,
            "comment": this.lang.emailServerParamDesc,
            "route": "/administration/sendmail",
            "unit": "supervision",
            "style": "fa fa-mail-bulk",
            "angular" : true,
            "hasParams" : false
        },
        {
            "id": "admin_shippings",
            "label": this.lang.mailevaAdmin,
            "comment": this.lang.mailevaAdminDesc,
            "route": "/administration/shippings",
            "unit": "supervision",
            "style": "fa fa-shipping-fast",
            "angular" : true,
            "hasParams" : false
        },
        {
            "id": "admin_reports",
            "label": this.lang.reports,
            "comment": this.lang.reportsAdmin,
            "route": "/administration/reports",
            "unit": "supervision",
            "style": "fa fa-chart-area",
            "angular" : true,
            "hasParams" : false
        },
        {
            "id": "view_history",
            "label": this.lang.history,
            "comment": this.lang.viewHistoryDesc,
            "route": "/administration/history",
            "unit": "supervision",
            "style": "fa fa-history",
            "angular" : true,
            "hasParams" : false
        },
        {
            "id": "view_history_batch",
            "label": this.lang.historyBatch,
            "comment": this.lang.historyBatchAdmin,
            "route": "/administration/history",
            "unit": "supervision",
            "style": "fa fa-history",
            "angular" : true,
            "hasParams" : false
        },
        {
            "id": "admin_update_control",
            "label": this.lang.updateControl,
            "comment": this.lang.updateControlDesc,
            "route": "/administration/versions-update",
            "unit": "supervision",
            "style": "fa fa-sync",
            "angular" : true,
            "hasParams" : false
        }
    ];

    private privileges: privilege[] = [
        {
            "id": "view_doc_history",
            "label": this.lang.viewDocHistory,
            "comment": this.lang.viewHistoryDesc,
            "unit": 'history'
        },
        {
            "id": "view_full_history",
            "label": this.lang.viewFullHistory,
            "comment": this.lang.viewFullHistoryDesc,
            "unit": 'history'
        },
        {
            "id": "edit_resource",
            "label": this.lang.editResource,
            "comment": this.lang.editResourceDesc,
            "unit": 'application'
        },
        {
            "id": "delete_document_in_detail",
            "label": this.lang.deleteDocumentInDetail,
            "comment": this.lang.deleteDocumentInDetail,
            "unit": 'application'
        },
        {
            "id": "manage_tags_application",
            "label": this.lang.manageTagsInApplication,
            "comment": this.lang.manageTagsInApplicationDesc,
            "unit": 'application'
        },
        {
            "id": "update_diffusion_indexing",
            "label": this.lang.allRoles,
            "comment": this.lang.updateDiffusionWhileIndexing,
            "unit": 'diffusionList'
        },
        {
            "id": "update_diffusion_except_recipient_indexing",
            "label": this.lang.rolesExceptAssignee,
            "comment": this.lang.updateDiffusionExceptRecipientWhileIndexing,
            "unit": 'diffusionList'
        },
        {
            "id": "update_diffusion_details",
            "label": this.lang.allRoles,
            "comment": this.lang.updateDiffusionWhileDetails,
            "unit": 'diffusionList'
        },
        {
            "id": "update_diffusion_except_recipient_details",
            "label": this.lang.rolesExceptAssignee,
            "comment": this.lang.updateDiffusionExceptRecipientWhileDetails,
            "unit": 'diffusionList'
        },
        {
            "id": "sendmail",
            "label": this.lang.sendmail,
            "comment": this.lang.sendmail,
            "unit": 'sendmail'
        },
        {
            "id": "use_mail_services",
            "label": this.lang.useMailServices,
            "comment": this.lang.useMailServices,
            "unit": 'sendmail'
        },
        {
            "id": "view_documents_with_notes",
            "label": this.lang.viewDocumentsWithNotes,
            "comment": this.lang.viewDocumentsWithNotesDesc,
            "unit": 'application'
        },
        {
            "id": "view_technical_infos",
            "label": this.lang.viewTechnicalInformation,
            "comment": this.lang.viewTechnicalInformation,
            "unit": 'application'
        },
        {
            "id": "config_avis_workflow",
            "label": this.lang.configAvisWorkflow,
            "comment": this.lang.configAvisWorkflowDesc,
            "unit": 'avis'
        },
        {
            "id": "config_avis_workflow_in_detail",
            "label": this.lang.configAvisWorkflowInDetail,
            "comment": this.lang.configAvisWorkflowInDetailDesc,
            "unit": 'avis'
        },
        {
            "id": "avis_documents",
            "label": this.lang.avisAnswer,
            "comment": this.lang.avisAnswerDesc,
            "unit": 'avis'
        },
        {
            "id": "config_visa_workflow",
            "label": this.lang.configVisaWorkflow,
            "comment": this.lang.configVisaWorkflowDesc,
            "unit": 'visaWorkflow'
        },
        {
            "id": "config_visa_workflow_in_detail",
            "label": this.lang.configVisaWorkflowInDetail,
            "comment": this.lang.configVisaWorkflowInDetailDesc,
            "unit": 'visaWorkflow'
        },
        {
            "id": "visa_documents",
            "label": this.lang.visaAnswers,
            "comment": this.lang.visaAnswersDesc,
            "unit": 'visaWorkflow'
        },
        {
            "id": "sign_document",
            "label": this.lang.signDocs,
            "comment": this.lang.signDocs,
            "unit": 'visaWorkflow'
        },
        {
            "id": "modify_visa_in_signatureBook",
            "label": this.lang.modifyVisaInSignatureBook,
            "comment": this.lang.modifyVisaInSignatureBookDesc,
            "unit": 'visaWorkflow'
        },
        {
            "id": "use_date_in_signBlock",
            "label": this.lang.useDateInSignBlock,
            "comment": this.lang.useDateInSignBlockDesc,
            "unit": 'visaWorkflow'
        },
        {
            "id": "print_folder_doc",
            "label": this.lang.printFolderDoc,
            "comment": this.lang.printFolderDoc,
            "unit": 'application'
        },
        {
            "id": "manage_attachments",
            "label": this.lang.manageAttachments,
            "comment": this.lang.manageAttachments,
            "unit": 'application'
        },
        {
            "id": "manage_own_attachments_in_details",
            "label": this.lang.manageOwnAttachmentsInDetails,
            "comment": this.lang.manageOwnAttachmentsInDetails,
            "unit": 'application'
        },
        {
            "id": "view_personal_data",
            "label": this.lang.viewPersonalData,
            "comment": this.lang.viewPersonalData,
            "unit": 'confidentialityAndSecurity'
        },
        {
            "id": "manage_personal_data",
            "label": this.lang.managePersonalData,
            "comment": this.lang.managePersonalData,
            "unit": 'confidentialityAndSecurity'
        }
    ];

    private menus: menu[] = [
        {
            "id": "admin",
            "label": this.lang.administration,
            "comment": this.lang.administration,
            "route": "/administration",
            "style": "fa fa-cogs",
            "unit": "application",
            "angular": true,
            'shortcut' : true
        },
        {
            "id": "adv_search_mlb",
            "label": this.lang.search,
            "comment": this.lang.search,
            "route": "index.php?page=search_adv&dir=indexing_searching",
            "style": "fa fa-search",
            "unit": "application",
            "angular": false,
            'shortcut' : true
        },
        {
            "id": "entities_print_sep_mlb",
            "label": this.lang.entitiesSeparator,
            "comment": this.lang.entitiesSeparator,
            "route": "/separators/print",
            "style": "fa fa-print",
            "unit": "entities",
            "angular": true,
            'shortcut' : false
        },
        {
            "id": "reports",
            "label": this.lang.reports,
            "comment": this.lang.reports,
            "route": "index.php?page=reports&module=reports",
            "style": "fa fa-chart-area",
            "unit": "reports",
            "angular": false,
            'shortcut' : false
        },
        {
            "id": "save_numeric_package",
            "label": this.lang.saveNumericPackage,
            "comment": this.lang.saveNumericPackage,
            "route": "/saveNumericPackage",
            "style": "fa fa-file-archive",
            "unit": "sendmail",
            "angular": true,
            'shortcut' : false
        }
    ];

    constructor(public headerService: HeaderService) { }

    getPrivileges(ids: string[]=null) {
        if (ids !== null) {
            return this.privileges.filter(elem => ids.indexOf(elem.id) > -1);
        } else {
            return this.privileges;
        }
        
    }

    getUnitsPrivileges(): Array<string> {
        return this.privileges.map(elem => elem.unit).filter((elem, pos, arr) => arr.indexOf(elem) === pos);
    }
    

    getPrivilegesByUnit(unit: string): Array<privilege> {
        return this.privileges.filter(elem => elem.unit === unit);
    }

    getMenus(): Array<menu> {
        return this.menus;
    }

    getCurrentUserMenus() {
        let menus = this.menus.filter(elem => this.headerService.user.privileges.indexOf(elem.id) > -1);

        if (this.headerService.user.groups.filter((group: any) => group.can_index === true).length > 0) {
            const indexingGroups: any[] = [];

            this.headerService.user.groups.filter((group: any) => group.can_index === true).forEach((group: any) => {
                indexingGroups.push({
                    id: group.id,
                    label: group.group_desc
                });
            });

            const indexingmenu: any = {
                "id": "indexing",
                "label": this.lang.recordMail,
                "comment": this.lang.recordMail,
                "route": "/indexing/"+indexingGroups[0].id,
                "style": "fa fa-file-medical",
                "unit": "application",
                "angular": true,
                'shortcut' : true,
                "groups": indexingGroups
            };
            menus.push(indexingmenu);
        }
        return menus;        
    }

    getMenusByUnit(unit: string): Array<menu> {
        return this.menus.filter(elem => elem.unit === unit);
    }

    getUnitsMenus(): Array<string> {
        return this.menus.map(elem => elem.unit).filter((elem, pos, arr) => arr.indexOf(elem) === pos);
    }

    getCurrentUserShortcuts(): Array<menu> {
        let shortcuts: any[] = [
            {
                "id": "home",
                "label": this.lang.home,
                "comment": this.lang.home,
                "route": "/home",
                "style": "fa fa-home",
                "unit": "application",
                "angular": true,
                "shortcut" : true
            }
        ];
        
        shortcuts = shortcuts.concat(this.menus.filter(elem => elem.shortcut === true).filter(elem => this.headerService.user.privileges.indexOf(elem.id) > -1));

        if (this.headerService.user.groups.filter((group: any) => group.can_index === true).length > 0) {
            const indexingGroups: any[] = [];

            this.headerService.user.groups.filter((group: any) => group.can_index === true).forEach((group: any) => {
                indexingGroups.push({
                    id: group.id,
                    label: group.group_desc
                });
            });

            const indexingShortcut: any = {
                "id": "indexing",
                "label": this.lang.recordMail,
                "comment": this.lang.recordMail,
                "route": "/indexing",
                "style": "fa fa-file-medical",
                "unit": "application",
                "angular": true,
                'shortcut' : true,
                "groups": indexingGroups
            };
            shortcuts.push(indexingShortcut);
        }

        return shortcuts;
    }

    getAdministrations(): Array<administration> {
        return this.administrations;
    }

    getCurrentUserAdministrationsByUnit(unit: string): Array<administration> {
        if (this.hasCurrentUserPrivilege('view_history') && this.hasCurrentUserPrivilege('view_history_batch')) {
            return this.administrations.filter(elem => elem.unit === unit).filter(elem => this.headerService.user.privileges.indexOf(elem.id) > -1).filter(priv => priv.id !== 'view_history_batch');
        } else {
            return this.administrations.filter(elem => elem.unit === unit).filter(elem => this.headerService.user.privileges.indexOf(elem.id) > -1);
        }
        
    }

    hasCurrentUserPrivilege(privilegeId: string) {

        return this.headerService.user.privileges.indexOf(privilegeId) > -1;
    }
}