import { AbstractApplicationPermissions, ApplicationPermissionEvents } from '@netless/forge-room'; export enum ForgeSlidePermissionFlag { /** * 没有任何权限, 只能同步他人的操作 */ none = 0b0000000000000000, /** * 可以操作上一步下一步动画 */ changeStep = 0b0000000000000001, /** * 可以切面页码 */ changePage = 0b0000000000000010, /** * 可以触发点击动画 */ clickAnim = 0b0000000000000100, /** * 拥有所有权限 */ all = ForgeSlidePermissionFlag.changePage | ForgeSlidePermissionFlag.changeStep | ForgeSlidePermissionFlag.clickAnim } export interface ForgeSlidePermissionEvents extends ApplicationPermissionEvents { /** * 当用户权限变更时触发 * @param { string } userId 对应 userId * @param { ForgeSlidePermissionFlag[] } flags 当前权限列表 * @param { number } value 权限值 */ change: (userId: string, flags: ForgeSlidePermissionFlag[], value: number) => void; } export class ForgeSlidePermissions extends AbstractApplicationPermissions { /** * 解析权限列表组合 * @param {number} value - 权限数字值 * @return {WhiteboardPermissionFlag[]} - 权限列表 */ public resolveFlags(value: number): ForgeSlidePermissionFlag[] { return [ ForgeSlidePermissionFlag.changePage, ForgeSlidePermissionFlag.changeStep, ForgeSlidePermissionFlag.clickAnim, ].filter(v => (v & value) !== 0); } }