q42-cms-components
Version:
Front-end package that provides a UI on top of the QMS back-end
56 lines (46 loc) • 1.68 kB
JavaScript
import { ServerStore } from './server-store.js';
import { PERMISSIONS } from '../constants.js';
class PermissionStore extends ServerStore {
constructor() {
super({
initial: {
userPermissions: [],
},
loaders: {
userPermissions: () => this.fetch('/authorization/permissions'),
}
});
}
findPermission(itemName) {
const itemEntityName = itemName.toLowerCase();
return this.userPermissions.find(permissionItem =>
permissionItem.cmsItemName.split('.').pop().toLowerCase() === itemEntityName
);
}
hasPermission(itemName, permission) {
const permissionEntry = this.findPermission(itemName);
return !!(permissionEntry && permissionEntry.permission >= permission);
}
getPermissions(itemName) {
const permissionEntry = this.findPermission(itemName);
return {
canRead: !!(permissionEntry && permissionEntry.permission >= PERMISSIONS.READ),
canUpdate: !!(permissionEntry && permissionEntry.permission >= PERMISSIONS.UPDATE),
canCreate: !!(permissionEntry && permissionEntry.permission >= PERMISSIONS.CREATE),
canDelete: !!(permissionEntry && permissionEntry.permission >= PERMISSIONS.DELETE),
}
}
canRead(itemName) {
return this.hasPermission(itemName, PERMISSIONS.READ);
}
canUpdate(itemName) {
return this.hasPermission(itemName, PERMISSIONS.UPDATE);
}
canCreate(itemName) {
return this.hasPermission(itemName, PERMISSIONS.CREATE);
}
canDelete(itemName) {
return this.hasPermission(itemName, PERMISSIONS.DELETE);
}
}
export const permissionStore = new PermissionStore();