• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

geosolutions-it / MapStore2 / 14534587011

18 Apr 2025 11:41AM UTC coverage: 76.977% (-0.02%) from 76.993%
14534587011

Pull #11037

github

web-flow
Merge f22d700f6 into 48d6a1a15
Pull Request #11037: Remove object assign pollyfills

30792 of 47937 branches covered (64.23%)

446 of 556 new or added lines in 94 files covered. (80.22%)

8 existing lines in 4 files now uncovered.

38277 of 49725 relevant lines covered (76.98%)

36.07 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

68.42
/web/client/selectors/security.js
1
/*
2
* Copyright 2017, GeoSolutions Sas.
3
* All rights reserved.
4
*
5
* This source code is licensed under the BSD-style license found in the
6
* LICENSE file in the root directory of this source tree.
7
*/
8

9

10
import get from 'lodash/get';
11
import castArray from "lodash/castArray";
12

13
export const rulesSelector = (state) => {
1✔
14
    if (!state.security || !state.security.rules) {
1!
15
        return [];
×
16
    }
17
    const rules = state.security.rules;
1✔
18
    return rules.map(rule => {
1✔
19
        const formattedRule = {};
×
NEW
20
        Object.assign(formattedRule, {'id': rule.id});
×
NEW
21
        Object.assign(formattedRule, {'priority': rule.priority});
×
NEW
22
        Object.assign(formattedRule, {'roleName': rule.roleName ? rule.roleName : '*'});
×
NEW
23
        Object.assign(formattedRule, {'userName': rule.userName ? rule.userName : '*'});
×
NEW
24
        Object.assign(formattedRule, {'service': rule.service ? rule.service : '*'});
×
NEW
25
        Object.assign(formattedRule, {'request': rule.request ? rule.request : '*'});
×
NEW
26
        Object.assign(formattedRule, {'workspace': rule.workspace ? rule.workspace : '*'});
×
NEW
27
        Object.assign(formattedRule, {'layer': rule.layer ? rule.layer : '*'});
×
NEW
28
        Object.assign(formattedRule, {'access': rule.access});
×
UNCOV
29
        return formattedRule;
×
30
    });
31
};
32

33
export const userSelector = (state) => state && state.security && state.security.user;
336✔
34
export const userGroupSecuritySelector = (state) => get(state, "security.user.groups.group");
57✔
35
export const userGroupsEnabledSelector = (state) => {
1✔
36
    const securityGroup = userGroupSecuritySelector(state);
56✔
37
    return securityGroup
56✔
38
        ? castArray(securityGroup)
39
            ?.filter(group => group.enabled)
25✔
40
            ?.map(group => group.groupName)
25✔
41
        : [];
42
};
43
export const userRoleSelector = (state) => userSelector(state) && userSelector(state).role;
102✔
44
export const userParamsSelector = (state) => {
1✔
45
    const user = userSelector(state);
1✔
46
    return {
1✔
47
        id: user.id,
48
        name: user.name
49
    };
50
};
51

52
export const isLoggedIn = state => state && state.security && state.security.user;
70✔
53
export const securityTokenSelector = state => state.security && state.security.token;
21✔
54
export const isAdminUserSelector = (state) => userRoleSelector(state) === "ADMIN";
35✔
55
export const isUserSelector = (state) => userRoleSelector(state) === "USER";
1✔
56
export const authProviderSelector = state => state.security && state.security.authProvider;
74✔
57

58
/**
59
 * Creates a selector that checks if user is allowed to edit
60
 * something based on the user's role and groups
61
 * by passing the authorized roles and groups as parameter for selector creation.
62
 * @param {string[]} allowedRoles array of roles allowed. Supports predefined ("ADMIN", "USER", "ALL") and custom roles
63
 * @param {string[]} allowedGroups array of user group names allowed
64
 * @returns {function(*): boolean}
65
 */
66
export const isUserAllowedSelectorCreator = ({
1✔
67
    allowedRoles,
68
    allowedGroups
69
})=> (state) => {
55✔
70
    const role = userRoleSelector(state);
55✔
71
    const groups = userGroupsEnabledSelector(state);
55✔
72
    return (
55✔
73
        castArray(allowedRoles).includes('ALL')
133✔
74
        || castArray(allowedRoles).includes(role)
75
        || castArray(allowedGroups)
76
            .some((group) => groups.includes(group))
11✔
77
    );
78
};
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc