bigbluebutton-Github/bigbluebutton-html5/imports/ui/components/notes/service.js
Pedro Beschorner Marin 810deb907b refactor(etherpad): access control et al.
Move all Etherpad's access control from Meteor to a separated [Node application](https://github.com/bigbluebutton/bbb-pads).
This new app uses [Etherpad's API](https://etherpad.org/doc/v1.8.4/#index_overview)
to create groups and manage session tokens for users to access them. Each group
represents one distinct pad at the html5 client.

- Removed locked users' access to pads: replaced readOnly pad's access with a new pad's content sharing routine
- Pad's access is now controlled by [Etherpad's API](https://etherpad.org/doc/v1.8.4/#index_overview)
- Closed captions edited content now reflects at it's live feedback
- Improved closed caption's dictation mode live feedback
- Moved all Etherpad's API control from Meteor to a separated [app](https://github.com/bigbluebutton/bbb-pads)
- Included access control both in akka-apps and bbb-pads
2022-01-21 16:56:01 -03:00

86 lines
2.0 KiB
JavaScript

import Users from '/imports/api/users';
import Meetings from '/imports/api/meetings';
import PadsService from '/imports/ui/components/pads/service';
import Auth from '/imports/ui/services/auth';
import { Session } from 'meteor/session';
import { ACTIONS, PANELS } from '/imports/ui/components/layout/enums';
const NOTES_CONFIG = Meteor.settings.public.notes;
const ROLE_MODERATOR = Meteor.settings.public.user.role_moderator;
const hasPermission = () => {
const user = Users.findOne(
{ userId: Auth.userID },
{
fields: {
locked: 1,
role: 1,
},
},
);
if (user.role === ROLE_MODERATOR) return true;
const meeting = Meetings.findOne(
{ meetingId: Auth.meetingID },
{ fields: { 'lockSettingsProps.disableNotes': 1 } },
);
if (user.locked) {
return !meeting.lockSettingsProps.disableNotes;
}
return true;
};
const getLastRev = () => {
const lastRev = Session.get('notesLastRev');
if (!lastRev) return -1;
return lastRev;
};
const setLastRev = () => {
const rev = PadsService.getRev(NOTES_CONFIG.id);
const lastRev = getLastRev();
if (rev !== 0 && rev > lastRev) {
Session.set('notesLastRev', rev);
}
};
const hasUnreadNotes = (sidebarContentPanel) => {
if (sidebarContentPanel === PANELS.SHARED_NOTES) return false;
const rev = PadsService.getRev(NOTES_CONFIG.id);
const lastRev = getLastRev();
return rev !== 0 && rev > lastRev;
};
const isEnabled = () => NOTES_CONFIG.enabled;
const toggleNotesPanel = (sidebarContentPanel, layoutContextDispatch) => {
layoutContextDispatch({
type: ACTIONS.SET_SIDEBAR_CONTENT_IS_OPEN,
value: sidebarContentPanel !== PANELS.SHARED_NOTES,
});
layoutContextDispatch({
type: ACTIONS.SET_SIDEBAR_CONTENT_PANEL,
value:
sidebarContentPanel === PANELS.SHARED_NOTES
? PANELS.NONE
: PANELS.SHARED_NOTES,
});
};
export default {
ID: NOTES_CONFIG.id,
toggleNotesPanel,
hasPermission,
isEnabled,
setLastRev,
getLastRev,
hasUnreadNotes,
};