mattermost-redux
Version:
Common code (API client, Redux stores, logic, utility functions) for building a Mattermost client
57 lines (45 loc) • 1.57 kB
text/typescript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {createSelector} from 'reselect';
import {getCurrentUser} from 'selectors/entities/common';
import {GlobalState} from 'types/store';
import {UserProfile} from 'types/users';
export type PermissionsOptions = {
channel?: string;
team?: string;
permission: string;
};
export function getRoles(state: GlobalState) {
return state.entities.roles.roles;
}
export const getMySystemRoles: (state: GlobalState) => Set<string> = createSelector(
getCurrentUser,
(user: UserProfile) => {
if (user) {
return new Set<string>(user.roles.split(' '));
}
return new Set<string>();
},
);
export const getMySystemPermissions: (state: GlobalState) => Set<string> = createSelector(
getMySystemRoles,
getRoles,
(mySystemRoles: Set<string>, roles) => {
const permissions = new Set<string>();
for (const roleName of mySystemRoles) {
if (roles[roleName]) {
for (const permission of roles[roleName].permissions) {
permissions.add(permission);
}
}
}
return permissions;
},
);
export const haveISystemPermission: (state: GlobalState, options: PermissionsOptions) => boolean = createSelector(
getMySystemPermissions,
(state: GlobalState, options: PermissionsOptions) => options.permission,
(permissions, permission) => {
return permissions.has(permission);
},
);