File

projects/netgrif-components-core/src/lib/authorization/permission/permission.service.ts

Index

Methods

Constructor

constructor(userComparator: UserComparatorService, _userService: UserService)
Parameters :
Name Type Optional
userComparator UserComparatorService No
_userService UserService No

Methods

Public canAssign
canAssign(task: Task | undefined)
Parameters :
Name Type Optional
task Task | undefined No
Returns : boolean
Public canCancel
canCancel(task: Task | undefined)
Parameters :
Name Type Optional
task Task | undefined No
Returns : boolean
Public canCollapse
canCollapse(task: Task | undefined)
Parameters :
Name Type Optional
task Task | undefined No
Returns : boolean
Public canFinish
canFinish(task: Task | undefined)
Parameters :
Name Type Optional
task Task | undefined No
Returns : boolean
Public canReassign
canReassign(task: Task | undefined)
Parameters :
Name Type Optional
task Task | undefined No
Returns : boolean
Public checkRolePerms
checkRolePerms(roles: Permissions, permission: string)
Parameters :
Name Type Optional
roles Permissions No
permission string No
Returns : boolean | undefined
Public checkUserPerms
checkUserPerms(users: UserPermissions, permission)
Parameters :
Name Type Optional
users UserPermissions No
permission No
Returns : boolean | undefined
Public hasCasePermission
hasCasePermission(case_: Case | undefined, permission: string)
Parameters :
Name Type Optional
case_ Case | undefined No
permission string No
Returns : boolean
Public hasNetPermission
hasNetPermission(action: string, net: PetriNetReferenceWithPermissions)
Parameters :
Name Type Optional
action string No
net PetriNetReferenceWithPermissions No
Returns : boolean
Public hasTaskPermission
hasTaskPermission(task: Task | undefined, permission: string)
Parameters :
Name Type Optional
task Task | undefined No
permission string No
Returns : boolean
Public resolvePermissions
resolvePermissions(rolePermValue: boolean | undefined, userPermValue: boolean | undefined)
Parameters :
Name Type Optional
rolePermValue boolean | undefined No
userPermValue boolean | undefined No
Returns : boolean
import {Injectable} from '@angular/core';
import {UserComparatorService} from '../../user/services/user-comparator.service';
import {AssignPolicy} from '../../task-content/model/policy';
import {Task} from '../../resources/interface/task';
import {UserService} from '../../user/services/user.service';
import {Case} from '../../resources/interface/case';
import {PetriNetReferenceWithPermissions} from '../../process/petri-net-reference-with-permissions';
import {Permissions, PermissionType, UserPermissions} from '../../process/permissions';

@Injectable({
    providedIn: 'root'
})
export class PermissionService {

    constructor(protected userComparator: UserComparatorService, protected _userService: UserService) {
    }

    public hasTaskPermission(task: Task | undefined, permission: string): boolean {
        if (!task) {
            return false;
        }

        const rolePermValue = this.checkRolePerms(task.roles, permission);
        const userPermValue = this.checkUserPerms(task.users, permission);
        return this.resolvePermissions(rolePermValue, userPermValue);
    }

    public hasCasePermission(case_: Case | undefined, permission: string): boolean {
        if (!case_) {
            return false;
        }

        const rolePermValue = this.checkRolePerms(case_.permissions, permission);
        const userPermValue = this.checkUserPerms(case_.users, permission);
        return this.resolvePermissions(rolePermValue, userPermValue);
    }

    public resolvePermissions(rolePermValue: boolean | undefined, userPermValue: boolean | undefined): boolean {
        return userPermValue === undefined ? (!!rolePermValue) : userPermValue;
    }

    public hasNetPermission(action: string, net: PetriNetReferenceWithPermissions): boolean {
        if (!net
            || !net.permissions
            || !action
            || !(net.permissions instanceof Object)
        ) {
            return false;
        }
        if (Object.keys(net.permissions).some(role =>
            this._userService.hasRoleById(role) ? net.permissions[role][action] === false : false)) {
            return false;
        }
        return Object.keys(net.permissions).some(role =>
            this._userService.hasRoleById(role) ? !!net.permissions[role][action] : false
        );
    }

    public canAssign(task: Task | undefined): boolean {
        return !!task
            && (
                (
                    task.assignPolicy === AssignPolicy.manual
                    && !task.user
                    && this.hasTaskPermission(task, PermissionType.ASSIGN)
                )
            );
    }

    public canCancel(task: Task | undefined): boolean {
        return !!task && !!task.user
            && this.hasTaskPermission(task, PermissionType.CANCEL)
            && ((task.assignedUserPolicy === undefined || task.assignedUserPolicy.cancel === undefined)
                || task.assignedUserPolicy.cancel);
    }

    public canReassign(task: Task | undefined): boolean {
        return !!task && !!task.user && this.userComparator.compareUsers(task.user)
            && this.hasTaskPermission(task, PermissionType.DELEGATE)
            && ((task.assignedUserPolicy === undefined || task.assignedUserPolicy.reassign === undefined)
                || task.assignedUserPolicy.reassign);
    }

    public canFinish(task: Task | undefined): boolean {
        return !!task
            && !!task.user
            && this.userComparator.compareUsers(task.user)
            && this.hasTaskPermission(task, PermissionType.FINISH);
    }

    public canCollapse(task: Task | undefined): boolean {
        return !!task
            && task.assignPolicy === AssignPolicy.manual;
    }

    public checkRolePerms(roles: Permissions, permission: string): boolean | undefined {
        let rolePermValue: boolean;
        if (!!roles) {
            Object.keys(roles).forEach(role => {
                if (roles[role][permission] !== undefined && this._userService.hasRoleById(role)) {
                    rolePermValue = rolePermValue === undefined ? roles[role][permission] : rolePermValue && roles[role][permission];
                }
            });
        }
        return rolePermValue;
    }

    public checkUserPerms(users: UserPermissions, permission): boolean | undefined {
        let userPermValue: boolean;
        if (!!users) {
            const loggedUserId = this._userService.user.getSelfOrImpersonated().id;
            Object.keys(users).forEach(user => {
                if (user === loggedUserId && users[user][permission] !== undefined) {
                    userPermValue = userPermValue === undefined ?
                        users[user][permission] : userPermValue && users[user][permission];
                }
            });
        }
        return userPermValue;
    }
}

result-matching ""

    No results matching ""